线程通信(子线程运行10次,主线程运行100次,如此循环50次)[用condition替代wait,notify等待和唤醒操作]
2012-02-06 08:44
543 查看
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 线程通信(子线程运行10次,主线程运行100次,如此循环50次)[用condition替代wait,notify等待和唤醒操作] * @author 谭飞 * @date 2012-02-02 */ public class ConditionThreadCommunication { /** * @param args */ public static void main(String[] args) { final Business business = new Business(); /*子线程*/ new Thread(new Runnable(){ @Override public void run() { for(int i = 1; i <= 50; i++) { business.sub(i); } } }).start(); /*主线程*/ for(int i = 1; i <= 50; i++) { business.main(i); } } static class Business {//处理线程安全归为一类,这样用的就是同一把同步锁 private boolean subShouldRun = true; //当为true时子线程执行,当为false时主线程执行 private Lock lock = new ReentrantLock();//创建一把锁 private Condition condition = lock.newCondition();//创建condition操作等待与唤醒操作 public void sub(int i) { lock.lock();//打开锁 try { while(!subShouldRun) { try { //this.wait();//等待线程 condition.await();//condition等待 } catch (Exception e) { e.printStackTrace(); } } for(int j = 1; j <= 10; j++) { System.out.println("sub Thread sequence of " + j + ", loop of " + i); } subShouldRun = false; //this.notify();//唤醒线程 condition.signal();//condition唤醒线程 }finally { lock.unlock();//关闭锁 } } public void main(int i) { lock.lock();//打开锁 try { while(subShouldRun) { try { //this.wait(); condition.await(); } catch (Exception e) { e.printStackTrace(); } } for(int j = 1; j <= 100; j++) { System.out.println("main Thread sequence of " + j + ", loop of " + i); } subShouldRun = true; //this.notify(); condition.signal(); }finally { lock.unlock();//关闭锁 } } } }
相关文章推荐
- 传统线程通信(子线程运行10次,主线程运行100次,如此循环50次)
- 子线程运行10次后,主线程运行100次,子主交叉运行。如此循环50次。
- java多线程: 子线程循环10次,主线程接着循环100次,如此循环50次
- 子线程循环10次,主线程执行100次,紧接着子线程执行10次,再执行主线程 如此往复50次。子线程循环的时候主线程不能打扰,相同的是主线程执行循环的时候子线程也不能打扰
- 子线程循环10次 主线程循环100次 然后如此反复50次
- 面试题:子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程循环100次,如此循环50次,请写出程序
- java一道多线程题,子线程循环10次,主线程接着循环100次,如此循环50次的问题
- 多线程面试题:子线程循环10次,接着主线程循环100次;接着回到子线程循环10次,然后再回到主线程循环100次,如此交替50次。
- 一个线程通信问题(sub运行10次,然后main运行100次,这样交替循环50次)
- (13)多线程与并发库之java5阻塞队列(BlockingQueue)的应用----子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程循环100次,如此循环50次
- (13)多线程与并发库之java5阻塞队列(BlockingQueue)的应用----子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程循环100次,如此循环50次
- 子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程100次,如此循环50次
- 面试题,子线程10次与主线程100次来回循环执行50次
- Java-线程$等待唤醒机制(wait,notify)
- 线程同步通信技术(四)子线程10次与主线程100次来回循环执行50次
- 子线程循环10次,紧接着主线程循环100次,来回50次
- 机试题-〉子线程循环10次,接着回到主线程循环100次,又接着回到子线程循环10次,再接着回到主线程又循环100次,如次循环50次,请写出程序
- 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次
- 主线程先循环20次,接着子线程循环10次,如此周而复始50次
- java多线程笔试题:子线程循环10次;接着主线程循环20次,接着又子线程循环10次,接着再回到主线程又循环20次,如此循环50次,请写出程序。