线程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开发中,由于UI组件的更新必须在主线程中执行,因此在编写多线程程序时需要注意以下几点: - **避免在子线程中更新UI**:可以通过`Handler`、`runOnUiThread()`等方法间接更新UI。 - **使用适当的线程池**...
- 死锁发生在两个或多个线程互相等待对方持有的资源,导致无法继续执行的情况。 - **题6**:如何避免死锁? - 遵循以下原则之一:避免循环等待、按顺序加锁、使用超时机制。 - **题7**:给出一个使用`...
3. 用原码一位除法进行两定点数相除,在执行运算之前首先要进行的操作是判商是否溢出。 5. 存储器进行两次连续、独立的操作(读或写)所需的时间间隔,通常称为存储器的存取速度。 6. 指令系统采用不同寻址方式的...
玩家轮流在3x3、4x4或更大棋盘上放置自己的棋子(通常是X和O),目标是先形成一行、一列或一条对角线的三个相同棋子。尽管规则简单,但其策略性不容小觑。 在MFC框架下开发三连棋,我们首先需要创建一个新的MFC应用...
2. **多道批处理系统**:允许多个作业同时装入主存,轮流占用处理器执行,提高了系统的资源利用率和吞吐率。但作业的响应时间较长,用户无法直接干预作业的执行。 3. **操作系统的主要任务和功能**:包括处理器管理...
游戏界面通常由一个棋盘和两个颜色的棋子构成,玩家轮流放置棋子,目标是先形成连续的五个同色棋子(水平、垂直或对角线方向)来赢得比赛。在这款源代码中,开发者可能运用了Android的Canvas类进行图形绘制,用以...
在10X10棋盘上,五子连珠才能获胜,因此需要检查所有方向(横向、纵向和两个对角线方向)是否存在连续五个相同颜色的棋子。 5. **AI算法** 对于AI部分,开发者可能采用了简单的Minimax算法或者更高级的Alpha-Beta...
五子棋游戏是一个经典的双人对战游戏,每方轮流在棋盘上放置黑白棋子,目标是先连成五颗同色的棋子。在Scratch中实现五子棋,需要理解以下几个关键知识点: 1. **角色与舞台**:在Scratch中,游戏的角色是活动的...
程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各线程之间的计 数器互不影响,独立存储。 1.如果线程正在执行的是一个Java方法,计数器记录的是正在执行的虚拟机字节码指令的地 址 2.如果正在...
MCS-51系列单片机中的8031、AT89C51及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。...
在这款游戏中,两名玩家轮流在3x3的网格上放置自己的标记,目标是先连成一行、一列或对角线的三个标记。这个游戏因其规则简单、趣味性强而深受玩家喜爱,同时也是一种学习编程逻辑和游戏设计的良好实践项目。 ...
井字游戏,也被称为“TicTacToe”,是一款广受欢迎的简单策略游戏,通常由两个人在3x3的网格上轮流放置标记,一方用“X”,另一方用“O”。目标是首先在行、列或对角线上形成三个相同的标记。这个游戏在软件开发领域...