思路,锁住资源,判断条件
方案一
package com.qst.Tesst;
import java.util.Scanner;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/*
* 用线程实现ABC顺序打印
*
*
* */
public class Test14 {
private static int state = 0;
public static void main(String[] args) {
final Lock l = new ReentrantLock();
ExecutorService executorService = Executors.newFixedThreadPool(3);
executorService.submit(new Runnable() {
@Override
public void run() {
while (true) {
synchronized (this){
if (state % 3 == 0) {
System.out.println("A"+ "====="+Thread.currentThread().getName());
state++;
}
}
}
}
});
executorService.submit(new Runnable() {
@Override
public void run() {
while (true) {
synchronized (this) {
if (state % 3 == 1) {
System.out.println("B" + "====="+Thread.currentThread().getName());
state++;
}
}
}
}
});
executorService.submit(new Runnable() {
@Override
public void run() {
while (true) {
synchronized (this) {
if (state % 3 == 2) {
System.out.println("C"+ "=====" + Thread.currentThread().getName());
state++;
}
}
}
}
});
}
}
方案二
package com.qst.Tesst;
import java.util.Scanner;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Test14 {
private static int state = 0;
public static void main(String[] args) {
final Lock l = new ReentrantLock();
ExecutorService executorService = Executors.newFixedThreadPool(3);
executorService.submit(new Runnable() {
@Override
public void run() {
while (true) {
l.lock();
if (state % 3 == 0) {
System.out.println("A"+"=====>"+Thread.currentThread().getName());
state++;
}
l.unlock();
}
}
});
executorService.submit(new Runnable() {
@Override
public void run() {
while (true) {
l.lock();
if (state % 3 == 1) {
System.out.println("B"+"=====>"+Thread.currentThread().getName());
state++;
}
l.unlock();
}
}
});
executorService.submit(new Runnable() {
@Override
public void run() {
while (true) {
l.lock();
if (state % 3 == 2) {
System.out.println("C"+"=====>"+Thread.currentThread().getName());
state++;
}
l.unlock();
}
}
});
}
}