`
someoneneedsme
  • 浏览: 4740 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

两线程轮流执行

阅读更多
线程1 打印  abcdef
线程2 打印  1234
让线程1,2轮流执行
打印出a1b2c3d4ef
public class TwoThreadTakeTurnsToExecute {
	
	public static void main(String[] args) {
		Task task = new Task();

		new MyThread<String>(1, task).start();
		new MyThread<Integer>(2, task).start();
	}
}

class MyThread<E> extends Thread {

	private int type;
	private Task task;

	public MyThread(int type, Task task) {
		super();
		this.type = type;
		this.task = task;
	}

	@Override
	public void run() {

		if (type == 1) {

			task.printChar();
		} else {
			task.printNumber();
		}
	}

}

class Task {

	List<String> strList;
	List<Integer> integerList;
	boolean strHasRemaiming = true ;
	boolean numberHasRemaiming = true;;

	public Task() {

		strList = new ArrayList<String>();
		strList.add("a");
		strList.add("b");
		strList.add("c");
		strList.add("d");
		strList.add("e");
		strList.add("f");
		

		integerList = new ArrayList<Integer>();
		integerList.add(1);
		integerList.add(2);
		integerList.add(3);
		integerList.add(4);
		

	}

	public synchronized void printChar() {

		for (int i = 0; i < strList.size(); i++) {

			System.out.print(strList.get(i));
			strHasRemaiming = i< strList.size()-1 ;
			try {
				Thread.sleep(500);
				notify();
				if (numberHasRemaiming && strHasRemaiming) {
					wait();
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	public synchronized void printNumber() {

		for (int i = 0; i < integerList.size(); i++) {

			System.out.print(integerList.get(i));
			numberHasRemaiming = i< integerList.size()-1 ;
			try {
				Thread.sleep(1000);
				notify();
				if (numberHasRemaiming && strHasRemaiming) {
					wait();
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

	}
}

a1b2c3d4ef
分享到:
评论

相关推荐

    Android多线程程序设计

    在Android开发中,由于UI组件的更新必须在主线程中执行,因此在编写多线程程序时需要注意以下几点: - **避免在子线程中更新UI**:可以通过`Handler`、`runOnUiThread()`等方法间接更新UI。 - **使用适当的线程池**...

    Java多线程-多线程知识点总结和企业真题

    - 死锁发生在两个或多个线程互相等待对方持有的资源,导致无法继续执行的情况。 - **题6**:如何避免死锁? - 遵循以下原则之一:避免循环等待、按顺序加锁、使用超时机制。 - **题7**:给出一个使用`...

    三连棋,MFC编程

    玩家轮流在3x3、4x4或更大棋盘上放置自己的棋子(通常是X和O),目标是先形成一行、一列或一条对角线的三个相同棋子。尽管规则简单,但其策略性不容小觑。 在MFC框架下开发三连棋,我们首先需要创建一个新的MFC应用...

    2012中科院计算机考研试题

    2. **多道批处理系统**:允许多个作业同时装入主存,轮流占用处理器执行,提高了系统的资源利用率和吞吐率。但作业的响应时间较长,用户无法直接干预作业的执行。 3. **操作系统的主要任务和功能**:包括处理器管理...

    android五子棋和连连看源代码

    游戏界面通常由一个棋盘和两个颜色的棋子构成,玩家轮流放置棋子,目标是先形成连续的五个同色棋子(水平、垂直或对角线方向)来赢得比赛。在这款源代码中,开发者可能运用了Android的Canvas类进行图形绘制,用以...

    C#写的五子棋游戏--棋盘10X10

    在10X10棋盘上,五子连珠才能获胜,因此需要检查所有方向(横向、纵向和两个对角线方向)是否存在连续五个相同颜色的棋子。 5. **AI算法** 对于AI部分,开发者可能采用了简单的Minimax算法或者更高级的Alpha-Beta...

    Scratch少儿编程项目源代码文件案例-[五子棋].zip

    五子棋游戏是一个经典的双人对战游戏,每方轮流在棋盘上放置黑白棋子,目标是先连成五颗同色的棋子。在Scratch中实现五子棋,需要理解以下几个关键知识点: 1. **角色与舞台**:在Scratch中,游戏的角色是活动的...

    Java 虚拟机面试题全面解析(干货)

    程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各线程之间的计 数器互不影响,独立存储。 1.如果线程正在执行的是一个Java方法,计数器记录的是正在执行的虚拟机字节码指令的地 址 2.如果正在...

    课程设计简易计算器设计

    MCS-51系列单片机中的8031、AT89C51及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。...

    Polarik-Tac-Toe

    在这款游戏中,两名玩家轮流在3x3的网格上放置自己的标记,目标是先连成一行、一列或对角线的三个标记。这个游戏因其规则简单、趣味性强而深受玩家喜爱,同时也是一种学习编程逻辑和游戏设计的良好实践项目。 ...

    TicTacToe

    井字游戏,也被称为“TicTacToe”,是一款广受欢迎的简单策略游戏,通常由两个人在3x3的网格上轮流放置标记,一方用“X”,另一方用“O”。目标是首先在行、列或对角线上形成三个相同的标记。这个游戏在软件开发领域...

Global site tag (gtag.js) - Google Analytics