您的位置:首页 > 编程语言 > Java开发

java线程通信

2009-02-03 09:26 183 查看
 不同线程间进行通信通常有两种简单方法:
方法一 通过访问共享变量的方式(注:需要处理同步问题)
方法二 通过管道流

其中方法一有两种实现方法,即
方法一a)通过内部类实现线程的共享变量
代码如下:

Java代码



/**  

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

 *  

 */  

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();   

    }   

}  

/**
* 通过内部类实现线程的共享变量
*
*/
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接口实现线程的共享变量
代码如下

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

  

public synchronized void run() {    

while (true)    

System.out.println(Thread.currentThread().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 = 0;

public synchronized void run() {
while (true)
System.out.println(Thread.currentThread().getName()
+ "is running and the index is " + index++);
}
}


方法二:
代码如下

Java代码



import java.io.IOException;    

import java.io.PipedInputStream;    

import java.io.PipedOutputStream;    

  

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();    

}    

}    

}   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java thread string class