您的位置:首页 > 其它

写两个线程,一个线程打印 1~52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z

2016-12-28 22:02 459 查看
package com.test7;

public class Test16_1 {

public static void main(String[] args) {
//创建一个打印机
Printer aprinter=new Printer();
//同步该打印机输出
NumPrinter np=new NumPrinter(aprinter);
AlpPrinter ap=new AlpPrinter(aprinter);
np.start();
ap.start();
}

}
class Printer
{
//标识该打印数字还是字母?False打印数字,True打印字母,木人先打印数字.
private boolean flag=false;
//打印数字
public synchronized void print1()
{
for (int i=0;i<52;)
{
if (flag==false)
{
System.out.print((i+1));
System.out.print((i)+2);
//只有成功打印,i才会自增,所以没有放在for循环里
i++;
i++;
//重新将flag置为true,等待输出字母
flag=true;
//激活其它线程
this.notifyAll();
}
else
{
try {
//如果为true,则说明不应输出数字,等待输出
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
}
//输出字母打印机,同数字打印机方法
public synchronized void print2()
{
for(char c='A';c<='Z';)
{
if (flag==true)
{
System.out.print(c);
flag=false;
c++;
this.notifyAll();
}
else
{
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
}
}
//创建数字打印机线程
class NumPrinter extends Thread
{
private Printer aprinter=new Printer();

public NumPrinter(Printer aprinter)
{
this.aprinter=aprinter;
}

public void run() {
// TODO Auto-generated method stub
aprinter.print1();
}
}
//创建字母打印机线程
class AlpPrinter extends Thread
{

private Printer aprinter=new Printer();

public AlpPrinter(Printer aprinter)
{
this.aprinter=aprinter;
}

public void run() {
// TODO Auto-generated method stub
aprinter.print2();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐