62,614
社区成员
发帖
与我相关
我的任务
分享
package testSix;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
class Print
{
private boolean flag = false;
public int num = 1;
public char chr = 'A';
private final Lock lock=new ReentrantLock();
private final Condition cond=lock.newCondition();
public void printNumber()
{
lock.lock();
try
{
if(flag)
{
if(num <= 52)
{
cond.wait();
}
}
else
{
//进入else进入了26次
System.out.print(num);
System.out.print(num + 1);
num += 2;
flag = true;
cond.signalAll();
}
}
catch(InterruptedException ie)
{
ie.printStackTrace();
}
finally
{
lock.unlock();
}
}
public void printWord()
{
lock.lock();
try
{
if(!flag)
{
if(chr <= 'Z')
{
cond.await();
}
}
else
{
System.out.print(chr);
chr += 1;
flag = false;
cond.signalAll();
}
}
catch(InterruptedException ie)
{
ie.printStackTrace();
}
finally
{
lock.unlock();
}
}
}
package testSix;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class printTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Print p = new Print();
ExecutorService service = Executors.newCachedThreadPool();
service.execute(()->{
for(int i = 0; i < 52; i ++)
{
p.printNumber();
}
});
service.execute(()->{
for(int i = 0; i < 52; i ++)
{
p.printWord();
}
});
}
}