JAVA线程

一.线程状态

1.创建状态
使用new运算符创建一个线程后,该线程仅仅是一个空对象,系统没有分配资源,称该线程处于创建状态(new thread)

2.可运行状态
使用start()方法启动一个线程后,系统为该线程分配了除CPU外的所需资源,使该线程处于可运行状态(Runnable)

3.运行中状态

java运行系统通过调度选中一个Runnable的线程,使其占有CPU并转为运行中状态(Running).此时,系统真正执行线程的run()方法.

4.阻塞状态
一个正在运行的线程因某种原因不能继续运行时,进入阻塞状态(Blocked),如sleep,wait等等

5.死亡状态
线程结束后是死亡状态(Dead)

二.线程实现方式

1. 继承Thread类(适用于单重继承情况)

2.实现Runable接口

三.线程中断

错误观点:使用interrupt()来中断线程

例如,线程B调用线程A的interrupt(),将中断标志置位,在线程中A使用isInterrupted()判定,

并将中断标志复位,中断线程A。但是,当线程A处于阻塞状态时,B线程调用A线程的interrupt()方法,

会抛出中断异常,此时,中断标志位被复位,interrupt()没有了效果。

正确观点:使用共享变量来控制(使用修饰符volatile 或将变量的访问放在同步代码块中)线程的中断

四.wait方法和notify方法

wait方法和notify()方法的使用一般情况是相互对应的,即用了wait方法,就应该有notify方法。

例如,A,B线程共享C对象,A线程调用wait方法是阻塞自己,并且释放对象锁,B线程调用C对象notify方法唤醒A线程(如果只存在A,B两个线程的话),若不唤醒A线程,A线程将一直

阻塞下去,直到被中断。

五.synchronized关键字的理解

1.synchronized首选是获得对象的锁(每个对象只有一把锁),然后同步所有利用该对象的锁进行同步的代码块

2.static synchronized

 synchronized作用于static 函数,这等同于在方法内部使用synchronized(Foo.class) ,使用与该类所有对象实例的同步代码块

3.只是想让一段代码同步时,可以创建一个特殊的instance变量(它得是一个对象)来充当锁(零长度的byte数组对象创建起来将比任何对象都经济)

六.yield和join方法

yield方法是使当前线程放弃执行机会,进入可执行状态

join方法是当前线程将当前线程进入阻塞状态,让被调用线程执行,当被调用线程执行完后,进入可执行状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值