java线程(二)x

线程有如下的几个状态

public enum State{

NEW,//线程已经创建,但是还没有start

RUNNABLE,//处于可运行的状态,一切就绪

BLOCKED,//处于阻塞状态,比如等待某个锁的释放

WAITING,//处于等待的状态

TIMED_WAITING,//等待特定的时间

TERMINATED//终止运行

}

线程中控制方法

wait(); causes the calling thread to wait until another thread calls the notify() or notifyAll() method of this object;

notify(),

notifyAll(),

interrupt(),如果说wait是一种“自愿”的行为,那么interrupt就是“被迫”的了。调用一个线程的interrupt的目的和这个单词的字面意思一样,就是“中断”他的执行的过程。

(1)如果thread正被blocked某个object的wait上,或者join、sleep方法中,那么会被唤醒,终中断的状态会被清除并且接收到InterruptedException。

(2)如果Thread被blocked在InterruptibleChannel的I/O操作中,那么中断状态会被置位,并且接收到ClosedByInterruptException,此时channel会被关闭。

(3)如果Thread被blocked在Selector中,那么中断状态会被置位并且马上返回,不会收到任何的Exception

join(),

public final void join();

public final void join(long millis,int nanos);

public final void join(long millis);

比如:

Thread t1=new Thread(new ThreadA());

Thread t2=new Thread(new ThreadB());

t1.start();

t1.join();

t2.start();

他希望达到的目的就是只有当t1线程执行完成的时候,我们才接着执行后面的t2.start()。这样就保证了两个线程的顺序执行。而带有时间参数的join()则多了一个限 制,即假如在规定的时间内t1没有执行完成,那么我们也会继续执行后面的语句,以防止“无限等待”拖垮整个程序。


sleep()  和wait一样都属于自愿的行为。只不过wait是等待某个object,而sleep则是等待时间,一旦设置的时间到了就会被唤醒


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值