知识大全 Java多线程例子
Posted 知
篇首语:追风赶月莫停留,平芜尽处是春山。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java多线程例子相关的知识,希望对你有一定的参考价值。
Java多线程例子 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
写出一组模拟生产者/消费者的协作程序
其中包括一个WoTou java 代表消息
一个MsgQueue java 为一个队列 提供put(Message msg)方法和get()方法
一个Produer java 为生产者线程 在其run方法中每隔 秒产生一个Message对像并放入MsgQueue队列
一个Consumer java为消费者线程 在其run方法中不断从MsgQueue队列中获取Message对像 并显示在屏幕上
一个TestMain java 在其main方法中 启动 个Produer线程和 个消费者线程
要求
对于MsgQueue java 队列的长度为 当消息超过 个时 put()方法需要阻塞 当消息队列为空时
get()方法需要阻塞
public class ProducerConsumer
public static void main(String[] args)
SyncStack ss = new SyncStack();
Producer p = new Producer(ss p );
Consumer c = new Consumer(ss c );
Producer p = new Producer(ss p );
Consumer c = new Consumer(ss c );
class WoTou<T>
int id;
WoTou(int id)
this id = id;
public String toString()
return WoTou : + id;
class SyncStack
int index = ;
WoTou[] arrWT = new WoTou[ ];
public void push(WoTou wt)
while(index == arrWT length)
try
this wait();
catch (InterruptedException e)
e printStackTrace();
this notifyAll();
arrWT[index] = wt;
index ++;
public WoTou pop()
while(index == )
try
this wait();
catch (InterruptedException e)
e printStackTrace();
this notifyAll();
index ;
return arrWT[index];
class Producer implements Runnable
SyncStack ss = null;
String a;
Producer(SyncStack ss String a)
this ss = ss;
this a= a;
Thread t=new Thread(this a);
t start();
public void run()
for(int i= ; i< ; i++)
synchronized(ss)
WoTou wt = new WoTou(i);
ss push(wt);
System out println(a+ 生产了 + wt);
try
Thread sleep((int)(Math random() * ));
catch (InterruptedException e)
e printStackTrace();
class Consumer implements Runnable
SyncStack ss = null;
String a;
Thread t;
Consumer(SyncStack ss String a)
this ss = ss;
this a= a;
t=new Thread(this a);
t start();
public void run()
for(int i= ; i< ; i++)
synchronized(ss)
WoTou wt = ss pop();
System out println(a+ 消费了: + wt);
try
Thread sleep((int)(Math random() * ));
catch (InterruptedException e)
e printStackTrace();
p 生产了 WoTou :
p 生产了 WoTou :
p 生产了 WoTou :
c 消费了: WoTou :
c 消费了: WoTou :
p 生产了 WoTou :
c 消费了: WoTou :
c 消费了: WoTou :
p 生产了 WoTou :
p 生产了 WoTou :
c 消费了: WoTou :
p 生产了 WoTou :
p 生产了 WoTou :
c 消费了: WoTou :
p 生产了 WoTou :
p 生产了 WoTou :
c 消费了: WoTou :
p 生产了 WoTou :
p 生产了 WoTou :
c 消费了: WoTou :
c 消费了: WoTou :
p 生产了 WoTou :
c 消费了: WoTou :
p 生产了 WoTou :
p 生产了 WoTou :
p 生产了 WoTou :
栈里有 个
作为多线程交互一的一个重要应用 定义用户输入和输出的列队类或者堆栈类一定要看成一个整体放进同步语句块里面 不能简单的分别调用输入同步方法或者输出同步方法 下面的程序就有问题 下面这个是一个教程例子 但是结果不对 究其原因实际上是因为列队类或者堆栈类是一个可变类 这种可变类要是有参数传递给某些不可变类时 可变类的构造方法必须也设置成为同步方法 不然就会出错
public class ProducerConsumer
public static void main(String[] args)
SyncStack ss = new SyncStack();
Producer p = new Producer(ss);
Consumer c = new Consumer(ss);
new Thread(p) start();
new Thread(p) start();
new Thread(p) start();
new Thread(c) start();
class WoTou
int id;
WoTou(int id)
this id = id;
public String toString()
return WoTou : + id;
class SyncStack
int index = ;
WoTou[] arrWT = new WoTou[ ];
public synchronized void push(WoTou wt)
while(index == arrWT length)
try
this wait();
catch (InterruptedException e)
e printStackTrace();
this notifyAll();
arrWT[index] = wt;
index ++;
public synchronized WoTou pop()
while(index == )
try
this wait();
catch (InterruptedException e)
e printStackTrace();
this notifyAll();
index ;
return arrWT[index];
class Producer implements Runnable
SyncStack ss = null;
Producer(SyncStack ss)
this ss = ss;
public void run()
for(int i= ; i< ; i++)
WoTou wt = new WoTou(i);
ss push(wt);
System out println( 生产了 + wt);
try
Thread sleep((int)(Math random() * ));
catch (InterruptedException e)
e printStackTrace();
class Consumer implements Runnable
SyncStack ss = null;
Consumer(SyncStack ss)
this ss = ss;
public void run()
for(int i= ; i< ; i++)
WoTou wt = ss pop();
System out println( 消费了: + wt);
try
Thread sleep((int)(Math random() * ));
catch (InterruptedException e)
e printStackTrace();
cha138/Article/program/Java/gj/201311/27299
相关参考
Java线程;生产消费者例子 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 小小回顾写了个简单的
网上参考别人的例子改自己的程序终于搞明白了原来在socket的服务器端设置线程并不是像之前想的那样建立一个连接后就重新开一个端口去监听这样的想法遇到了很多问题首先当我把客户端弄成for循环递增的链
Java的多线程-实现多线程及线程的同步 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一.实现
Java多线程编程基础之线程和多线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 随着计算机技
Java多线程如何创建多个线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java多线程的同
超线程多核心下Java多线程编程分析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一Java环
超线程多核心下Java多线程编程技术分析[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
超线程多核心下Java多线程编程技术分析[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
超线程多核心下Java多线程编程技术分析[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
超线程多核心下Java多线程编程技术分析[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb