JAVA开发知识之Java的线程

目录

  • Java多线程讲解

    • 一丶多线程简介

      • 1.进程的概念
      • 2.线程概念
      • 3.Java中多线程Thread类
    • 二丶多线程的创建
      • 1.继承Thread类.重写run方法.
      • 2.实现Runalbe接口.
    • 三丶线程的启动和终止
    • 四丶线程的状态
    • 五丶线程控制的基本方法
      • 1.线程名称
      • 2.线程优先级
      • 3.Sleep()方法
      • 4.join()方法
      • 5.isAlive()方法
    • 六丶线程的同步
    • 七丶死锁
    • 八丶线程的通信
    • 九丶线程高级API(Timer 丶 TimerTask)

Java多线程讲解

一丶多线程简介

1.进程的概念

进程是什么,进程就是一个程序在运行中的一个实例.比如QQ.比如浏览器.这个就是多进程的状态.

意思就是可以同时运行多个程序.

可以打开任务管理器.观看我们的进程 ctrl + shift + esc 或者 ctrl + alt +del

2.线程概念

线程,线程就是同一个进程的多条路.我们知道代码都是顺序执行的.多线程的意思就是可以有多条代码一同执行.它是归属于进程的.进程可以看做一个外壳.真正执行代码的是线程.进程唯一的个线程就是执行代码.如果没有线程,那么进程也终结了.

Java中的单线程代码:

public static void main(String[] args) throws Exception {

        for (int i = 0; i < 100;i++) {
            System.out.println("i = " + i);
            Thread.sleep(1000);
        }

        for (int j = 0; j < 100;j++) {
            System.out.println("j = " + j);
            Thread.sleep(1000);
        }

    }

上面就是典型的单线程执行代码.第一个循环不执行完毕,第二个循环是不会执行的.

多线程程序则是,我可能当前执行打印i 后面就可能执行打印j了.

3.Java中多线程Thread类

java.lang.Thread是个线程类.核心的类.

还有一个借口是 Runnable 也可以实现多线程.

Thread类中需要了解的方法.

public void start()使该线程开始执行;指定run方法

public void run();我们需要重写这个方法.调用start则会执行我们的线程.

public static void sleep(long millis,int nanos)throws InterruptedException 延时命令给一个时间

二丶多线程的创建

线程的创建有两种办法,第一种继承Thread类.重写run方法.调用start开始执行.

第二种实现Runnable接口

1.继承Thread类.重写run方法.

public class ExtenThreadTest extends Thread {
    public void run() {
        for(int i = 0; i < 10; i ++) {
            System.out.println("i = " + i);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
        }
    }
}

外部调用:

    public static void main(String[] args) throws Exception {
        ExtenThreadTest t = new ExtenThreadTest();
        t.start();
        for(int j = 0; j < 100; j++) {
            System.out.println("j = " + j);
            Thread.sleep(100);
        }

    }

此时我们的run方法打印我们的i值, 主方法打印我们的j值.当线程发生切换的时候就会显示一种打印完i之后打印j的效果.

2.实现Runalbe接口.

有时候我们的java继承了一个类.但是自己当前类还需要可以支持多线程.现在不能继承Thread类了.

因为Java不能多继承.所以Java为我们提供了一个接口,实现这个接口即可. Runnable();

如果观看源代码可以得知,Thread类其实也是实现了Runnable接口.并且对Runnable接口的run方法重写的.

步骤:

  • 1.创建一个类,实现Runnable接口,并且重写里面的run方法.
  • 2.使用Thread创建Thread对象.构造方法.填写我们类的实例.
  • 3.因为填写的是我们的实例.所以相当于重写了run方法.构成了多态
  • 4.调用start()函数启动线程.

    具体代码例子;

public class ExtenThreadTest implements Runnable {
    public void run() {
        for(int i = 0; i < 10; i ++) {
            System.out.println("i = " + i);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
        }
    }
}

使用代码

public static void main(String[] args) throws Exception {
        Thread t = new Thread(new ExtenThreadTest()); //这里不同
        t.start();//启动线程
        t.setName("ExtenThreadTest");
        for(int j = 0; j < 100; j++) {
            System.out.println("j = " + j);
            Thread.sleep(100);
        }

    }

三丶线程的启动和终止

1.线程的启动使用start()方法启动.如果直接调用run就是单线程程序

2.线程的结束可以使用stop();不过这个方法已经废弃了.正常的是你的线程中给一个标记. 通过外部设置标记.来让线程自然停止.

3.使用interrupt();方法.这个方法可能会抛异常,不推荐.

四丶线程的状态

线程的状态分为以下状态:

1.NEW 新建状态 当一个线程实例化之后,就处于这个状态

2.RUNNABLE 可以运行的, 当使用start方法的时候就是这个.线程可以用,但是不一定你能用.

3.BLOCKED 阻塞状态,使用Sleep()的时候是这个

4.WAITING 等待状态,两个线程进行通信的时候,进行登台

5.TIMED_WAITING 等待时间过了,就是Timed_waiting状态

6.TERMINATED 线程的正常终止.

五丶线程控制的基本方法

1.线程名称

每个线程都用自己的名字,我们可以在构造的时候传入线程名字

使用线程的 getName()获取名称.

Thread.currentThread().getNmae(); 获得当前线程名字. 主要方法就是 getNmae().
setName(String name);给线程设置名字

2.线程优先级

线程的优先级默认就是0,我们可以设置.

Thread t = new Thread();
t.setPriority(Thread.MAX_PRIORITY);
t.SETpRIORITY(Thread.MIN_PRIORITY); 一般不设置,主要是CPU操作的获取时间片

3.Sleep()方法

Sleep(); 方法就是让当前线程等待一下.将时间片放出去,cpu就会去指向其它线程.
使用Sleep之后,线程就是阻塞状态, blocked, 睡眠完毕之后就是 runable状态.
使用Sleep();会出现一个异常.代表你给我终止了.
如下代码:
public void fun()
{
 for(int i = 0; i < 10;i++)
{
  try
 {
   Thread.sleep(1000);
 }
 catch(InterruptedException e){
   e.printstackTrace();
  }
  if (i >=5){
  this.interrupt(); 这句代码会产生异常
  }
}
}

4.join()方法

5.isAlive()方法

六丶线程的同步

七丶死锁

八丶线程的通信

九丶线程高级API(Timer 丶 TimerTask)

原文地址:https://www.cnblogs.com/iBinary/p/9867128.html

时间: 2024-10-28 14:29:25

JAVA开发知识之Java的线程的相关文章

Java开发知识之Java的集成开发环境

Java开发知识之Java的集成开发环境 一丶Eclipse 开发环境 Eclipse是IBM公司花了4000万美金开发的一个集成开发环境.是一个免费开源的. 下载官网: http://www.eclipse.org 下载地址:http://www.eclipse.org/downloads/packages/ 打开下载地址,下载适用于Java开发人员的IDE 有可能你的界面是英文版本的.因为我使用的是Google 浏览器.自动给我翻译了一下网页. 注意图标: JC.下载适用于我们系统的版本即可

Java开发知识之Java控制语句

Java开发知识之Java控制语句 一丶复合语句 不管任何语言都有控制语句 if else if else whie do  while  for .... 首先讲解的是java的复合语句 1.什么是复合语句 复合语句简称为块语句,C 语言以及其它语言都有的块语句 { int nValue = 10; } 块语句有一个作用就是限制作用域.  比如我们的变量nValue 在块语句当中.如果出了块语句那么就不能使用了. 二丶条件语句 条件语句   if else if  else 跟其它语言一样.

Java开发知识之Java的枚举

Java开发知识之Java的枚举 一丶什么是枚举 枚举可以理解为就是常量,在Java中我们定义常量.都是用 final语句. C++中都是用const关键字. 枚举跟C++概念都是一样的.就是特定的常量而已. 二丶Java中的枚举 java中的常量.一般都是final定义.但是我们讲过.final定义的常量.初始化的时候可以每次给不同的值. 所以加上static 才能保证其内存不会改变.一般常量都是定义在接口中给我们使用的. 可能需要连续定义. 例如: public final static i

Java开发知识之Java中的泛型

Java开发知识之Java中的泛型 一丶简介什么是泛型. 泛型就是指泛指任何数据类型. 就是把数据类型用泛型替代了. 这样是可以的. 二丶Java中的泛型 Java中,所有类的父类都是Object类.所以定义泛型的时候,设计长须的话传入的值与返回的值都是Object类型为主.如果是用具体的实例,就要进行转换了.具体参考向上转型,跟向下转型. JDK 1.5版本才有了泛型机制. 语法如下: class 类名<T >{ public T a; public T b; public void Set

Java开发知识之Java中的集合上List接口以及子类讲解.

Java开发知识之Java中的集合类 一丶什么是集合类 如果你学习说数据结构,那么学习集合就很简单. 因为集合就是存储数据的结构. 例如 有链表结构 (list ) 还有 map结构.等等. 集合类就是存储数据的集合. 我们可以看一下继承图: Collection接口. 由 Set类.以及 List类就行实现. 并且还有子类. Map 有 HashMap类. 还有 TreeMap类继承. 各个类都是不一样的.比如 List.代表链表类.可以存储数据,是连续的.只要有前驱后继即可. 子类就是对链表

Java开发知识之JAVA的反射

目录 Java中的反射机制 一丶什么是反射机制 二丶Class类,自描述类.获取类名的三种方法 1.使用静态属性Class获取 2.使用Class方法 forName()获取自描述Class 3.使用Object自带的getClass返回自描述Class 三丶了解一下自描述类Class方法. 1.Class针对包,类,父类.接口的方法 2.Class对构造方法提供的方法 3.Class对方法提供的方法. 4.Class对成员变量提供的方法 5.对内部类提供的方法 四丶反射访问构造方法 Java中

java开发知识IO知识之输入输出流以及文件

java开发知识IO知识之输入输出流以及文件 一丶流概述 流十一组有序的数据序列.根据操作的类型,可以分为输入流跟输出流两种. IO(input/output)输入/输出流提供了一条通道程序.可以使用这条通道把源的字节序列送到目的地 简单来说. 就是操作二进制. 二进制提供了读写功能. 写就是输出. 读就是输入. 输入输出流图示: 输入流讲解 InputStream类. 1. 输入流以及类层次结构 输入流就是从"文件" 读取到内存. 这个文件是抽象的.意思就是不管什么内容从硬盘也好.任

java基础知识《JAVA 核心技术》学习笔记(一)

一:数据类型 (1)java整形: 类型                         存储要求 int                              4字节 short                          2字节 long                           8字节 byte                           1字节 (2)浮点类型 类型                         储存要求 float            

《java基础知识》Java集合(Collection)

作为一个Developer,Java集合类是我们在工作中运用最多的.最频繁的类.相比于数组(Array)来说,集合类的长度可变,更加适合于现代开发需求: Java集合就像一个容器,可以存储任何类型的数据,也可以结合泛型来存储具体的类型对象.在程序运行时,Java集合可以动态的进行扩展,随着元素的增加而扩大.在Java中,集合类通常存在于java.util包中. Java集合主要由2大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口.