1 java多线程技能

1 java多线程技能

1.2.1 继承Thread类

Thread.java类中的start()方法通知“线程规划器”此线程已经准备就绪,等待调用线程对象的run()方法。

如果调用thread.run()就不是异步执行了,而是同步,那么此线程对象不会交给“县城规划器”来进行处理,而是由main主线程来调用run()方法。

另外,执行start()方法的顺序不代表线程的启动顺序。

1.2.3 实例变量和线程安全

当一个线程想要执行同步方法里面的代码时,线程首先尝试去拿这把锁,如果能够拿到这把锁,那么这个线程就可以执行synchronize里面的代码,如果不能拿到这把锁,那么这个线程就会不断尝试那这把锁,直到能够拿到为止,而且是有多个线程同时去争抢这把锁。

currentThread()方法

currentThread()方法可以返回代码正在被哪个线程调用的信息。

isAlive()方法

1.5 sleep()方法

方法sleep()的作用是在指定的毫秒数内让 当前正在执行的线程 休眠,这个”正在执行的线程”是指this.currentThread()返回的线程。

1.7.2 判读线程是否是停止状态

this.interrupted():测试当前线程是否已经是中端状态,
执行后具有将状态标志清楚为false的功能。 是static方法。

this.isInterrupted(): 测试线程Thread对象是否已经是中断状态,但不清楚状态标志。不是static方法。

1.7.3 能停止的线程 – 异常法

public class MyThread extends Thread{
    @Override
    public void run(){
        super.run();
        try{
            for(int i=0;i<50000;i++){
                if(this.interrupted()){
                    sys.out("已经是停止状态了,我要退出了!");
                    throw new InterruptedException();
                }
            }
        }catch (InterruptedException e){
            sys.out("进MyThread.java类run方法中的catch了!");
            e.printStackTrace();
        }
    }
}

1.7.4 在沉睡中停止

如果在sleep状态下停止某一线程,会进入catch语句,并且清除停止状态值,使之变成false。

如果用interrupt停止线程时线程还没有进入sleep,那么线程将继续执行直到在遇到sleep的时候才进入catch语句。

1.8 暂停线程

可以使用suspend()方法暂停线程,使用resume()方法恢复县城的执行。

两个方法都已经被弃用,因为可能造成独占和不同步。

1.9 yield 方法

yield()方法的作用是放弃当前cpu资源,将它让给其他任务去占用cpu执行时间。但放弃的时间不确定,有可能刚刚放弃,马上又获得cpu时间。

1.10 线程优先级

设置线程优先级使用setPriority()方法。

在java中,线程的优先级具有继承性,比如A线程启动B线程,则B线程与A线程等级是一样的。

优先级具有规则性

优先级具有随机性

1.11 守护线程

当进程中不存在非守护线程时,则守护线程自动销毁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值