线程交替打印
原创
©著作权归作者所有:来自51CTO博客作者wfclient的原创作品,请联系作者获取转载授权,否则将追究法律责任
import java.util.*;
/*
题目:一个线程与另一线程交替打印100个数,第一个线程打印1~10,第二个打印11~20,以此类推
思路:生产者消费者的变形,可把10个数存到List中,用get方法从List中得到的数,然后再加10
*/
public class ThreadTest{
public static void main(String[] args){
Queue q=new Queue();
Producer p=new Producer(q);
Consumer c=new Consumer(q);
p.start();
c.start();
}
}
class Producer extends Thread{
private Queue q;
List<Integer> list=null;
public Producer(Queue q){
this.q=q;
}
public void run(){
for(int i=0;i<5;i++){
list=new ArrayList<Integer>();
for (int j=(2*i*10+1);j<=2*i*10+10;j++){
list.add(j);
System.out.print(j+" ");
}
q.put(list);
System.out.println();
}
}
}
class Consumer extends Thread{
private Queue q;
List<Integer> list;
public Consumer(Queue q){
this.q=q;
}
public void run(){
while(true){
q.get();
}
}
}
class Queue{
private List list ;
boolean bFull=false;
public synchronized void put(List<Integer> list){
if(!bFull){
this.list=list;
bFull=true;
notify();
}
try{
wait();
}catch(Exception e){
e.printStackTrace();
}
}
public synchronized void get(){
if(!bFull){
try{
wait();
}catch(Exception e){
e.printStackTrace();
}
}
System.out.println();
for(int i=0;i<list.size();i++){
// System.out.println();
int m=(Integer)(list.get(i));
System.out.print((m+10)+" ");
}
bFull=false;
notify();
}
}
上一篇: 字符串、Map
下一篇:生产者 消费者 枪膛
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java 实现交替打印 java多线程交替打印数字
java数字和字母两个线程交替打印
java git i++ -
java 多线程交替打印数字 多线程交替打印1到10
Synchronized 这个要知道你锁的对象是谁
java 多线程交替打印数字 ide System 原子类