Java线程之间的通信
来源:互联网 发布:自动化控制电脑软件 编辑:程序博客网 时间:2024/05/16 08:04
在java中我们实现多线程间通信则主要采用"共享变量"和"管道流"这两种方法。
方法一 通过访问共享变量的方式(注:需要处理同步问题)
方法二 通过管道流
其中方法一有两种实现方法,即
方法一a)通过内部类实现线程的共享变量
代码如下:
/*** 通过内部类实现线程的共享变量**/public class Innersharethread {public static void main(String[] args) {Mythread mythread = new Mythread();mythread.getThread().start();mythread.getThread().start();mythread.getThread().start();mythread.getThread().start();}}class Mythread {int index = 0;private class InnerThread extends Thread {public synchronized void run() {while (true) {System.out.println(Thread.currentThread().getName()+ "is running and index is " + index++);}}}public Thread getThread() {return new InnerThread();}}
b)通过实现Runnable接口实现线程的共享变量
代码如下:
/*** 通过实现Runnable接口实现线程的共享变量*/public class Interfacaesharethread {public static void main(String[] args) {Mythread mythread = new Mythread();new Thread(mythread).start();new Thread(mythread).start();new Thread(mythread).start();new Thread(mythread).start();}}/* 实现Runnable接口 */class Mythread implements Runnable {int index = 0;public synchronized void run() {while (true)System.out.println(Thread.currentThread().getName() + "is running andthe index is " + index++);}}
方法二(通过管道流):
代码如下:
public class CommunicateWhitPiping {public static void main(String[] args) {/*** 创建管道输出流*/PipedOutputStream pos = new PipedOutputStream();/*** 创建管道输入流*/PipedInputStream pis = new PipedInputStream();try {/*** 将管道输入流与输出流连接 此过程也可通过重载的构造函数来实现*/pos.connect(pis);} catch (IOException e) {e.printStackTrace();}/*** 创建生产者线程*/Producer p = new Producer(pos);/*** 创建消费者线程*/Consumer c = new Consumer(pis);/*** 启动线程*/p.start();c.start();}}/*** 生产者线程(与一个管道输入流相关联)**/class Producer extends Thread {private PipedOutputStream pos;public Producer(PipedOutputStream pos) {this.pos = pos;}public void run() {int i = 8;try {pos.write(i);} catch (IOException e) {e.printStackTrace();}}}/*** 消费者线程(与一个管道输入流相关联)**/class Consumer extends Thread {private PipedInputStream pis;public Consumer(PipedInputStream pis) {this.pis = pis;}public void run() {try {System.out.println(pis.read());} catch (IOException e) {e.printStackTrace();}}}
0 0
- java线程之间的通信
- Java线程之间的通信
- java线程之间的通信
- java线程之间的通信
- java线程之间通信
- java 线程之间的管道通信
- java多线程(三)线程之间的通信
- java io 不同线程之间的通信
- java 多线程 线程之间的通信
- 线程之间的通信
- 线程之间的通信
- 线程之间的通信
- 线程之间的通信
- 线程之间的通信
- 线程之间的通信
- 线程之间的通信
- 线程之间的通信
- 线程之间的通信
- J2SE_删除指定文件(文件夹)
- Eclipse + MinGW + winpcap配置过程
- 3D char
- Jquery在UpdatePanel更新后失效的问题解决。
- iOS 面试总结
- Java线程之间的通信
- 网页广告中JS代码的信息监听
- 基于插件式的开发框架
- 用select模式实现TCP和UDP的混合监听
- 关于隐式Intent和IntentFilter
- eclipse cdt hover 背景色修改
- jquery获取radio选中的值,checkbox选中的值,select选中的值,select选中option的name
- 单据套打WINFORM实现,带预览功能
- linux配置Xmanager,yum以及cognosERR-2002无可用进程的解决办法