java基础 多线程

进程:是一个正在执行的程序

线程是包含于进程,每个进程至少有一个线程

详情请搜索:进程控制块功能、线程控制块功能

(不深入追究时可以看做)

java虚拟机启动时会有一个进程java.exe          ————》该进程中至少一个线程负责java程序的执行

而且该线程运行的代码存在于main方法中         该线程称之为主线程

线程与线程之间不断地抢占cpu资源(随机性)

扩展:比如进行垃圾回收用到的线程

1.如何自定义一个线程:??

api文档:java.lang

类Thread

创建新执行线程有两种方法。

一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。

(1)创建一个子类  让子类继承thread 并重写thread类的run方法   

(2)在其他类中创建上一步的子类的对象,每创建一个对象就是创建一个线程

(3)对象名.start();

start()方法是虚拟机调用对象的run()方法;

为什么要覆盖run方法:

该类定义了一个功能,用于存储线程要运行的代码。该存储功能就是run方法。

也就是thread类中的run方法,用于存储线程要运行的代码,(主线程要运行的代码其实是用虚拟机定义存储在main方法中)

在其他类的main方法中对象名.start()方法是开启线程并执行 运行改线程的run方法

对象名.run()则仅仅是对象的调用方法,虽然对象线程对象被创建,却没有被执行

线程运行状态:

创建:=》运行start()

1   运行=》冻结(冻结状态是临时放弃执行资格) sleep(参数time)

      冻结=》运行   sleep时间到

2.  运行=》冻结 wait()方法

      冻结=》运行  notify()方法

运行=》消亡  stop();run方法结束

还有一种状态是临时状态(阻塞)(具备运行资格但没有执行权)

当冻结状态解除后会转到阻塞状态 有了运行资格排队等候执行权

有运行资格有运行权的就是运行状态

(详情请百度操作系统     cpu资源调度)

用Thread的方法 getname()获取线程名称

因为子类继承Thread 所以对象名.getname()也可以获取到线程名称

Thread.currentThread()获取当前线程的对象名称

在创建类似卖票系统中:

多个线程同时卖票(同时使一个变量减),所以,当这种情况时:该变量因为static(静态变量)

猜你喜欢

转载自blog.csdn.net/lxw23333/article/details/81281754