package htr;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ConditionTest {
public static void main(String[] args) {
final Shar shar=new Shar();
new Thread(){
@Override
public void run() {
while(true){
try {
//Thread.sleep(1);
} catch (Exception e) {
e.printStackTrace();
}
shar.say1();
}
}
}.start();
new Thread(){
@Override
public void run() {
while(true){
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
shar.say2();
}
}
}.start();
new Thread(){
@Override
public void run() {
while(true){
try {
//Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
shar.say3();
}
}
}.start();
}
}
class Shar{
Lock lock=new ReentrantLock();
Condition cd1=lock.newCondition();
Condition cd2=lock.newCondition();
Condition cd3=lock.newCondition();
java.util.concurrent.atomic.AtomicInteger next=new AtomicInteger(1);
public void say1(){
try {
lock.lock();
while(next.get()!=1){
try {
cd1.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
next.getAndSet(2);
System.out.println("111111111");
}catch(Exception s){
s.printStackTrace();
} finally{
cd1.signal();
lock.unlock();
}
}
public void say2(){
try{
lock.lock();
while(next.get()!=2){
try {
cd2.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
next.getAndSet(3);
System.out.println("22222222222222222222");
}
catch(Exception s){
s.printStackTrace();
}finally{
cd3.signal();
lock.unlock();
}
}
public void say3(){
try{
lock.lock();
while(next.get()!=3){
try {
cd3.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
next.getAndSet(1);
System.out.println("333333333");
}catch(Exception s){
s.printStackTrace();
} finally{
cd1.signal();
lock.unlock();
}
}
}
java线程排队执行
最新推荐文章于 2024-07-14 14:25:46 发布