4個線程,A線程輸出A,B線程輸出B,C線程輸出C,D線程輸出D 輸出格式爲:ABCDABCDABCDABCDABCDABCDABCDABCDABCD....
代碼如下:
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ThreadTest extends Thread {
private static String tmp;//輸出字符串
private static Lock lock = new ReentrantLock();
private static int state = 0;
static boolean flag;
public static String multiThreadWrite(final int times) {
tmp = new String();
flag = false;
Thread threadA = new Thread() {
public void run() {
int count = 0;
while (count < times) {
lock.lock();
if (state % 4 == 0) {
tmp += "A";
state++;
count++;
}
lock.unlock();
}
}
};
Thread threadB = new Thread() {
public void run() {
int count = 0;
while (count < times) {
lock.lock();
if (state % 4 == 1) {
tmp += "B";
state++;
count++;
}
lock.unlock();
}
}
};
Thread threadC = new Thread() {
public void run() {
int count = 0;
while (count < times) {
lock.lock();
if (state % 4 == 2) {
tmp += "C";
state++;
count++;
}
lock.unlock();
}
}
};
Thread threadD = new Thread() {
public void run() {
int count = 0;
while (count < times) {
lock.lock();
if (state % 4 == 3) {
tmp += "D";
state++;
count++;
}
lock.unlock();
}
flag = true;
}
};
threadA.start();
threadB.start();
threadC.start();
threadD.start();
while (!flag)
; // 防止main線程在四個線程執行完之前就返回tmp值
return tmp;
}
public static void main(String[] args) {
String ss = multiThreadWrite(3);
System.out.println(ss);
}
}
輸出結果:ABCDABCDABCD