如何在两个线程池中让陈俊某和某某飞交替出现提个问题真费劲,123456789
package test;
public class 线程同步 implements Runnable {
public static void main(String[] args) {
线程同步 data = new 线程同步();
Thread th1 = new Thread(data, "陈俊某");
Thread th2 = new Thread(data, "某某飞");
th1.start();
th2.start();
}
boolean bFlag = true;
@Override
public void run() {
while (true) {
if (Thread.currentThread().getName().equals("陈俊某") && bFlag) {
System.out.println("陈俊某");
bFlag = false;
} else if (Thread.currentThread().getName().equals("某某飞") && !bFlag) {
System.out.println("某某飞");
bFlag = true;
}
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
线程类
package com.thread;
public class WorkThread implements Runnable {
//输出的名字
private String name;
//本线程工作标志
private int myFlag;
public WorkThread(String name, int myFlag){
this.name = name;
this.myFlag = myFlag;
}
@Override
public void run() {
while(true){
int currFlag = ThreadController.getFlag();
if(currFlag == myFlag){
//当前标志和线程工作标志一致,输出名字
System.out.println(Thread.currentThread().getName() + " - " + this.name);
//改变标志,触发另一个线程输出其他名字
ThreadController.chageFlag();
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//标志管理类
package com.thread;
public class ThreadController {
//两个值的标志量
//volatile的作用 变量值改变让所有线程可见
private volatile static int flag = 0;
synchronized public static int getFlag(){
//返回当前标志量
return flag;
}
synchronized public static void chageFlag(){
//改变当前标志量
flag = (flag == 0? 1: 0);
}
}
测试类
package com.thread;
public class Test {
public static void main(String[] args) {
//标志为0时,输出"陈俊某"
Thread t1 = new Thread(new WorkThread("陈俊某", 0));
t1.start();
//标志为1时,输出"某某飞"
Thread t2 = new Thread(new WorkThread("某某飞", 1));
t2.start();
}
}
结果:
那可以采用生产者消费者模式呀