之前碰到过这样的问题:同时启动两个线程,那么如何让两个线程交替执行呢?
public class ThreadWaitTest { public static class StarterThread implements Runnable { private Object lock = null; public StarterThread(Object lock) { this.lock = lock; } public void run() { System.out.println("start.."); /*for(int i =0; i<50; i++){ System.out.println("start:"+i); }*/ synchronized (lock) { try { for (int i = 0; i < 50; i++) { System.out.println("start:" + i); lock.notifyAll(); lock.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } } } } public static class EnderThread implements Runnable { private Object lock = null; public EnderThread(Object lock) { this.lock = lock; } public void run() { System.out.println("end.."); /*for(int i =0; i<50; i++){ System.out.println("end:"+i); }*/ synchronized (lock) { for (int i = 0; i < 50; i++) { System.out.println("end:" + i); lock.notifyAll(); try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } public static void main(String[] args) { Object lock = new Object(); Thread starterThread = new Thread(new StarterThread(lock)); Thread enderThread = new Thread(new EnderThread(lock)); starterThread.start(); enderThread.start(); }
这里主要用到的同步锁的知识点。一个对象只有一把锁,两个线程交替获取同一个对象的锁,从而交替运行同步方法,达到线程交替运行的目的。
相关推荐
C# 多线程互斥 两个线程交替工作 C#多线程互斥,两个线程交替工作,如上图所示,挺有意思的。
实现了两个线程交替输出,基于vs2010
如果一个程序中要实现两段程序代码同时交替运行,就需要产生多个线程,并指定每个线程上所要运行的程序代码段,这就是多线程。 程序启动运行时,就自动产生了一个线程,main方法就是在这个线程上运行的,当不再产生...
C# 在vs2008下完美运行,通过AutoResetEvent,根据两个线程的运行时间,选择线程跟随或是线程交替,达到线程同步或是异步的目的。
一个程序实现多个代码同时交替运行就需要产生多个线程 CPU随机的抽出时间,让我们的程序一会做这件事情,一会做另外一件事情 同其他大多数编程语言不同,Java内置支持多线程编程(multithreaded programming)...
这个程序涉及到两个线程的的协调问题,两个线程为了能够相互协调运行,必须持有一个共同的状态,通过这个状态来维护两个线程的执行,通过使用threading.Condition对象就能够完成两个线程之间的这种协调工作。...
当多个线程访问同一个对象时,如果不用考虑这些线程在运行环境下的调度和交替运行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获取正确的结果,那么这个对象时线程的 ...
2. 两个线程while中,两次printf前后,分别加lock和unlock 3. 将unlock挪至第二个sleep后,发现交替现象很难出现。 线程在操作完共享资源后本应该立即解锁,但修改后,线程抱着锁睡眠。睡醒解锁后又立即加锁,这两个...
3.创建两个线程,分别打印输出不同的字符串信息。观察并分析结果。 4.自行设计个性化的内核线程,给出运行结果。 设计两个线程,一个线程打印大的爱心,一个线程打印小的爱心。在屏幕上进行输出不断交替出现的现象...
并发与高并发概念1 概念并发:同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程交替得换入或者换出内存,这些线程是同时“存在”的,每个线程都处于执行
55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...
55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。 ...
55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...
55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...
55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...
55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...
55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...
55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...
55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 40 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...