线程的基本操作

1、终止线程

        -Thread.stop()不推荐使用。它会释放所有monitor.


        例子:


       1.线程1,准备写ID=1,NAME=啊花

       2.线程2,等待资源,准备写ID=2,NAME=隔壁老王


       当线程1再写数据ID=1,进去后,准备写NAME=啊花,当系统暴力调用stop方法,此时线程1会释放资源。而,线程2抢占到资源后,会读到不一致错误的数据。


2、线程中断

       -Thread.interrupt()  中断线程     

       -Thread.currentThread().isInterrupter()判断线程是否处于中断状态


伪代码:

Thread t = new Thread(new Runnable(){

public void run() {
while(true){
if(Thread.currentThread().isInterrupted()){
System.out.println("thread is interrupted...");
break;
}
}
Thread.yield();//真正让现场进入等待地操作
}

});


升级稳妥地中断操作:

Thread t = new Thread(new Runnable(){
public void run() {
while(true){
if(Thread.currentThread().isInterrupted()){
System.out.println("thread is interrupted...");
break;
}
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
//设置线程中断异常,重新设置中断操作
Thread.currentThread().interrupt();
}
}
Thread.yield();//真正让现场进入等待地操作
}
});


3、挂起(suspend)和继续执行(resume)线程


    -  suspend()不会释放锁

    -  如果加锁发生在resume()之前,死锁就会产生


例如,线程1正在执行,线程2通过resume线程1,此时线程1在调用suspend方法。那么,如果线程2resume调用线程1发生在suspend之前,就会发生线程1占用资源,产生死锁状态。


上代码:



查找进程状态:






说明t2状态处于RUNNABLE状态



4、等待线程结束(join)和谦让(yeild)

  

    join通常使用在等待某个线程执行完之后,我再执行下一步操作。

    join(0) 0表示无限期地等待。

实现原理



5、守护线程





守护线程设置要在线程开启之前,上图案例,不会执行syso方法,不会打印出  I am alive

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值