java

位置:IT落伍者 >> java >> 浏览文章

java间的线程通信


发布日期:2018年10月21日
 
java间的线程通信

不同线程间进行通信通常有两种简单方法

方法一 通过访问共享变量的方式(注需要处理同步问题)

方法二 通过管道流

其中方法一有两种实现方法

方法一a)通过内部类实现线程的共享变量

代码如下

Java代码

/**

* 通过内部类实现线程的共享变量

*

*/

public class Innersharethread {

public static void main(String[] args) {

Mythread mythread = new Mythread()

mythreadgetThread()start()

mythreadgetThread()start()

mythreadgetThread()start()

mythreadgetThread()start()

}

}

class Mythread {

int index = ;

private class InnerThread extends Thread {

public synchronized void run() {

while (true) {

Systemoutprintln(ThreadcurrentThread()getName()

+ is running and index is + index++)

}

}

}

public Thread getThread() {

return new InnerThread()

}

}

/**

* 通过内部类实现线程的共享变量

*

*/

public class Innersharethread {

public static void main(String[] args) {

Mythread mythread = new Mythread()

mythreadgetThread()start()

mythreadgetThread()start()

mythreadgetThread()start()

mythreadgetThread()start()

}

}

class Mythread {

int index = ;

private class InnerThread extends Thread {

public synchronized void run() {

while (true) {

Systemoutprintln(ThreadcurrentThread()getName()

+ is running and index is + index++)

}

}

}

public Thread getThread() {

return new InnerThread()

}

}

方法二b)通过实现Runnable接口实现线程的共享变量

代码如下

Java代码

/**

* 通过实现Runnable接口实现线程的共享变量

* @author Administrator

*

*/

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 = ;

public synchronized void run() {

while (true)

Systemoutprintln(ThreadcurrentThread()getName()

+ is running and the index is + index++)

}

}

/**

* 通过实现Runnable接口实现线程的共享变量

* @author Administrator

*

*/

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 = ;

public synchronized void run() {

while (true)

Systemoutprintln(ThreadcurrentThread()getName()

+ is running and the index is + index++)

}

}

方法二

代码如下

Java代码

import javaioIOException;

import javaioPipedInputStream;

import javaioPipedOutputStream;

public class CommunicateWhitPiping {

public static void main(String[] args) {

/**

* 创建管道输出流

*/

PipedOutputStream pos = new PipedOutputStream()

/**

* 创建管道输入流

*/

PipedInputStream pis = new PipedInputStream()

try {

/**

* 将管道输入流与输出流连接

* 此过程也可通过重载的构造函数来实现

*/

nnect(pis)

} catch (IOException e) {

eprintStackTrace()

}

/**

* 创建生产者线程

*/

Producer p = new Producer(pos)

/**

* 创建消费者线程

*/

Consumer c = new Consumer(pis)

/**

* 启动线程

*/

pstart()

cstart()

}

}

/**

* 生产者线程(与一个管道输入流相关联)

*

*/

class Producer extends Thread {

private PipedOutputStream pos;

public Producer(PipedOutputStream pos) {

thispos = pos;

}

public void run() {

int i = ;

try {

poswrite(i)

} catch (IOException e) {

eprintStackTrace()

}

}

}

/**

* 消费者线程(与一个管道输入流相关联)

*

*/

class Consumer extends Thread {

private PipedInputStream pis;

public Consumer(PipedInputStream pis)

{

thispis = pis;

}

public void run() {

try {

Systemoutprintln(pisread())

} catch (IOException e) {

eprintStackTrace()

}

}

}

               

上一篇:Java多线程初学者指南(3):使用Runnable接口创建线程

下一篇:java设计模式之Flyweight(元类)