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
原创粉丝点击