Java高并发--等待线程结束和谦让
2017-09-27 07:22
253 查看
针对本格专题我们主要讨论join()和yield()这两个方法。
一、等待线程结束
如果我们想要在一个线程中获取到另外一个线程的处理结果,那么 这个时候我们该怎么办呢?最好的方式当然就是等待另一个线程的结束后再来执行当前线程,这个时候就该我们的join()方法上场了。
注意:这个方法一共有两个重载方法,传入了时间参数的重载方法表示等待固定的时间,如果在等待的时间结束后等待的线程还没有执行完,这个时候就不管了,依然执行自己的线程。另外一个没有时间参数的就是无限制的等待下去。具体使用方法如下:
public class JoinAndYield {
public volatile static int i = 0;
public static class AddThread extends Thread{
@Override
public void run(){
for(i=0;i<10000000;i++);
}
}
public static void main(String[] args) throws InterruptedException {
AddThread addThread = new AddThread();
addThread.start();
addThread.join();
System.out.printf("i = "+i);
}
}上面的代码的执行结果如下:
i = 10000000针对上面的执行结果,我们如果去掉join()方法这行代码,就会发现执行结果是i=0。因为这个结果并没有等待线程addThread执行完才执行,所以获取到的结果i没有是1000000。
二、谦让
在一个线程要结束或者结束的时候,如果它觉得自己不再需要cpu资源,这个时候就可以调用yield()方法来降低自己的优先级,从而可以把cpu资源让出给其他线程,但是这个时候并不意味之当前线程就不需要cpu资源了,只是它占用的资源的优先级的变低了。
一、等待线程结束
如果我们想要在一个线程中获取到另外一个线程的处理结果,那么 这个时候我们该怎么办呢?最好的方式当然就是等待另一个线程的结束后再来执行当前线程,这个时候就该我们的join()方法上场了。
注意:这个方法一共有两个重载方法,传入了时间参数的重载方法表示等待固定的时间,如果在等待的时间结束后等待的线程还没有执行完,这个时候就不管了,依然执行自己的线程。另外一个没有时间参数的就是无限制的等待下去。具体使用方法如下:
public class JoinAndYield {
public volatile static int i = 0;
public static class AddThread extends Thread{
@Override
public void run(){
for(i=0;i<10000000;i++);
}
}
public static void main(String[] args) throws InterruptedException {
AddThread addThread = new AddThread();
addThread.start();
addThread.join();
System.out.printf("i = "+i);
}
}上面的代码的执行结果如下:
i = 10000000针对上面的执行结果,我们如果去掉join()方法这行代码,就会发现执行结果是i=0。因为这个结果并没有等待线程addThread执行完才执行,所以获取到的结果i没有是1000000。
二、谦让
在一个线程要结束或者结束的时候,如果它觉得自己不再需要cpu资源,这个时候就可以调用yield()方法来降低自己的优先级,从而可以把cpu资源让出给其他线程,但是这个时候并不意味之当前线程就不需要cpu资源了,只是它占用的资源的优先级的变低了。
相关文章推荐
- java并发-主线程等待子线程结束
- Java中等待所有线程都执行结束
- Java Thread.join()详解--父线程等待子线程结束后再结束
- Java:多线程等待所有线程结束(CountDownLatch/CyclicBarrier) .
- 《并发编程》--5.线程等待结束(join)和线程谦让(yield)
- 线程:Java主线程等待子线程结束
- java 多线程 主线程等待 子线程序列、并发结果
- java中 等待所有子线程结束 后再执行一段代码。
- Java 并发编程中的 CountDownLatch 锁用于多个线程同时开始运行或主线程等待子线程结束
- Java多线程等待所有线程结束(CountDownLatch/CyclicBarrier)
- JAVA主线程等待子线程全部结束
- java并发(一) CountDownLatch (在多个线程都结束后再去执行某个任务)
- java 多线程 主线程等待子线程结束
- Java Thread.join()详解--父线程等待子线程结束后再结束
- Java线程学习(一):线程并发和线程忙等待
- Java线程与并发编程实践----等待通知(生产者消费者问题)线程
- Java并发和多线程4:使用通用同步工具CountDownLatch实现线程等待
- Java:多线程等待所有线程结束(CountDownLatch/CyclicBarrier)
- java中等待所有线程都执行结束(转)
- Java并发和多线程4:使用通用同步工具CountDownLatch实现线程等待