`
wangxuefang
  • 浏览: 120895 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何让两个线程交替运行

    博客分类:
  • java
 
阅读更多

之前碰到过这样的问题:同时启动两个线程,那么如何让两个线程交替执行呢?

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();

	}

 这里主要用到的同步锁的知识点。一个对象只有一把锁,两个线程交替获取同一个对象的锁,从而交替运行同步方法,达到线程交替运行的目的。

  • 大小: 2.1 KB
分享到:
评论

相关推荐

    C# 多线程互斥 两个线程交替工作

    C# 多线程互斥 两个线程交替工作 C#多线程互斥,两个线程交替工作,如上图所示,挺有意思的。

    两线程交替运行demo

    实现了两个线程交替输出,基于vs2010

    Java线程详解.ppt

    如果一个程序中要实现两段程序代码同时交替运行,就需要产生多个线程,并指定每个线程上所要运行的程序代码段,这就是多线程。 程序启动运行时,就自动产生了一个线程,main方法就是在这个线程上运行的,当不再产生...

    C# 多线程同步、异步_AutoResetEvent用法

    C# 在vs2008下完美运行,通过AutoResetEvent,根据两个线程的运行时间,选择线程跟随或是线程交替,达到线程同步或是异步的目的。

    多线程面试相关知识点

    一个程序实现多个代码同时交替运行就需要产生多个线程 CPU随机的抽出时间,让我们的程序一会做这件事情,一会做另外一件事情 同其他大多数编程语言不同,Java内置支持多线程编程(multithreaded programming)...

    python使用threading.Condition交替打印两个字符

    这个程序涉及到两个线程的的协调问题,两个线程为了能够相互协调运行,必须持有一个共同的状态,通过这个状态来维护两个线程的执行,通过使用threading.Condition对象就能够完成两个线程之间的这种协调工作。...

    Java并发理论,如何理解线程安全.docx

    当多个线程访问同一个对象时,如果不用考虑这些线程在运行环境下的调度和交替运行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获取正确的结果,那么这个对象时线程的 ...

    Linux系统编程之线程同步

    2. 两个线程while中,两次printf前后,分别加lock和unlock 3. 将unlock挪至第二个sleep后,发现交替现象很难出现。 线程在操作完共享资源后本应该立即解锁,但修改后,线程抱着锁睡眠。睡醒解锁后又立即加锁,这两个...

    西北工业大学计算机学院计算机操作系统实验报告一 创建GeekOS

    3.创建两个线程,分别打印输出不同的字符串信息。观察并分析结果。 4.自行设计个性化的内核线程,给出运行结果。 设计两个线程,一个线程打印大的爱心,一个线程打印小的爱心。在屏幕上进行输出不断交替出现的现象...

    crzhare#programming-data#01-并发基本概念1

    并发与高并发概念1 概念并发:同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程交替得换入或者换出内存,这些线程是同时“存在”的,每个线程都处于执行

    最新Java面试宝典pdf版

    55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...

    Java面试宝典2010版

    55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。 ...

    Java面试笔试资料大全

    55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...

    Java面试宝典2012版

    55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...

    Java面试宝典2012新版

    55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...

    Java面试宝典-经典

    55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...

    JAVA面试宝典2010

    55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...

    java面试题大全(2012版)

    55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...

    java面试宝典2012

    55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 40 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...

Global site tag (gtag.js) - Google Analytics