线程杂记

在单CPU的计算机中,其实并没有真正的并行,它只不过是CPU时间钟快速轮转调度给你的错觉。,而这种错觉让你产生了他们真的在同一时刻同事运行。

对计算机来说每一个任务就是一个进程。即task为一个进程。

创建一个线程,并且重写其run方法,将enjoyMusic交给他执行。

启动新的线程,只有调用了Thread的start方法,才代表派生出了一个新的线程。

每个线程都有自己的局部变量b表、程序计数器、以及生命周期

查看线程的工具:jdk自带的Jconsole

NEW :新建

RUNNBALE:就绪

RUNNING:运行

BLOCKED:阻塞

TERMINATED:结束(死亡)

其中:

NEW状态通过 start方法进入RUNNABLE状态;

RUNNABLE状态必须调用start方法;

线程一经启动就可以立即得到执行么?答案是否定的。

中间的状态叫可执行状态(RUNNABLE),就是说他具备执行的资格,但是并没有真正的执行起来而是等待CPU的调度。

 

通过轮训或者其他方式从任务可执行队列中选中了线程,

进入BLOCKED状态,比如调用了sleep,或者外套方法而加入了waitSet中。

线程中,run方法是被JNI的方法start()调用的。

Thread被构造后的NEW状态,事实上threadStatus这个内部属性为0;

不能两次启动Thread,否则就会出现IllegalThreadStateException异常。

线程启动后将会被加入到一个ThreadGroup中

一个线程生命周期结束,也就是到了TERMINATED状态,再次调用start方法是不允许的。

第一个是重复启动,只是第二次启动时不允许的,而第二次企图重新激活也是抛出了非法状态的异常,但是此时没有线程,因为该线程的生命周期已经被终结。

 

创建线程只有一种凡是那就是构造Thread类,而实现线程的执行单元则有两种方式,第一种是重写Thread的run方法,第二种是实现Runnable 接口的run方法。

线程生命周期需要一幅图:

待做(·  。·);

 

线程默认命名:

线程会以“Thread-”开始,然后和数字组合;

eg:

Thread-0

Thread-2

Thread-1

Thread-3

命名线程:

Thread(Runnable target,String name)name代表线程名;

Thread(String name)name代表线程名;

线程一旦启动名字不能被改。

线程的父子关系:

新创建的任何一个线程都会有一个父线程。

一个线程的创建肯定是由另一个线程完成的。

被创建线程的父线程是创建它的线程。main函数所在的线程是由jvm创建,也就是main线程。父线程都是main线程。

ThreadGroup:

main所在的ThreadGroup称其为main。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值