多线程学习2

1.有关run和start

调用start才会真正创建线程,不调用start就没调用线程(在内核创建PCB)

t.run和t.start区别,start是创建新线程执行方法(和原线程并发的),而run不创建,在main线程上执行方法。

2.中断一个线程

(Thread 内部包含了一个 boolean 类型的变量作为线程是否被中断的标记)

interrupt方法的行为有两种情况:

1.t线程在运行状态,会设置Thread.currentThread().isInterrupted()标志位为true

2.t线程在阻塞状态(sleep),不会触发标志位,而是触发一个interruptedException,这个异常会把sleep提前唤醒,可以加上break来中断。

ps:

如果线程因为调用 wait/join/sleep 等方法而阻塞挂起,则以 InterruptedException 异常的形式通 知,清除中断标志。 当出现 InterruptedException 的时候, 要不要结束线程取决于 catch 中代码的写法. 可以选择 忽略这个异常, 也可以跳出循环结束线程(注释掉这个异常然后加break)

否则,只是内部的一个中断标志被设置,thread 可以通过 Thread.interrupted() 判断当前线程的中断标志被设置,清除中断标志。 Thread.currentThread().isInterrupted() 判断指定线程的中断标志被设置,不清除中断标志

3.线程等待(由于线程之间的调度是不确定的,所以可以通过一些特殊操作来对线程的执行顺序作出干预,故用join)

如在main中调用t.join效果是让main线程阻塞等待,等到t执行完了main才继续执行。(t让自己线程先执行,其他线程全等着)如果调用join之前,t线程已经结束了,则此时join不需要阻塞等待了

join是Thread类的一个方法,启动线程后直接调用,即join()的作用是:“等待该线程终止”,该线程是指的主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。

4.获取当前线程的引用

public static Thread currentThread();

哪个线程里调用,得到的就是哪个线程的引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值