1.写两个线程,一个线程打印 1-52,另一个线程打印A-Z,打印顺序是12A34B…5152Z;
class Print1{
private int flag=1;
private int count=1;
public synchronized void printNum(){
while (flag!=1){
try{
wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
System.out.print(2*count-1 );
System.out.print(2*count);
flag=2;
notify();
}
public synchronized void Zimu(){
while (flag!=2){
try{
wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
System.out.print((char)(count-1+'A'));
count++;
flag=1;
notify();
}
}
public class TestAA {
public static void main(String[] args) {
Print1 print=new Print1();
new Thread (()->{
for(int i=0;i<26;i++){
print.printNum();
}
}).start();
new Thread(()->{
for(int i=0;i<26;i++){
print.Zimu();
}
}).start();
}
}
2.编写一个程序,启动三个线程,三个线程的名称分别是 A,B,C;每个线程将自己的名称在屏幕上打印5遍,打印顺序是ABCABC…
class Print2{
private int flag=1;
private int count=0;
public int getCount(){
return count;
}
public synchronized void printA(){
while(flag!=1){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(Thread.currentThread().getName());
flag=2;
count++;
notifyAll();
}
public synchronized void printB(){
while (flag!=2){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(Thread.currentThread().getName());
flag=3;
count++;
notifyAll();
}
public synchronized void printC(){
while (flag!=3){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(Thread.currentThread().getName());
flag=1;
count++;
notifyAll();
}
}
class MyThread1 implements Runnable {
private Print2 print;
public MyThread1(Print2 print){
this.print=print;
}
@Override
public void run() {
while (print.getCount()<13){
if(Thread.currentThread().getName().equals("A")){
print.printA();
}
else if (Thread.currentThread().getName().equals("B")){
print.printB();
}
else if (Thread.currentThread().getName().equals("C")){
print.printC();
}
}
}
}
class TestB{
public static void main(String[] args) {
Print2 print2=new Print2();
MyThread1 myThread=new MyThread1(print2);
Thread thread1=new Thread(myThread,"A");
Thread thread2=new Thread(myThread,"B");
Thread thread3=new Thread(myThread,"C");
thread1.start();
thread2.start();
thread3.start();
}
}
总结:
对于需要进行循环打印的线程,一般可以用一个整型变量来控制打印的结果,不同的数值对应不同的打印方法,最后再进行判断,与对应数值相等则直接打印,否则wait()等待。