我的账户
动脑学院

教育培训在线课程

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

Java间的线程通信

[复制链接]
q1w2e3r4t5 发表于 2018-12-19 11:53:59 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

其中方法一有两种实现方法,
方法一a)通过内部类实现线程的共享变量
代码如下:
Java
代码
/**  
*
通过内部类实现线程的共享变量  
*  
*/  
public class Innersharethread{   
    public static voidmain(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 InnerThreadextends 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 = newMythread();   
new Thread(mythread).start();   
newThread(mythread).start();   
newThread(mythread).start();   
newThread(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
代码
importjava.io.IOException;   
importjava.io.PipedInputStream;   
importjava.io.PipedOutputStream;   
  
public class CommunicateWhitPiping{   
public static void main(String[] args){   
/**   
*
创建管道输出流   
*/   
PipedOutputStream pos = newPipedOutputStream();   
/**   
*
创建管道输入流   
*/   
PipedInputStream pis = newPipedInputStream();   
try {   
/**   
*
将管道输入流与输出流连接   
*
此过程也可通过重载的构造函数来实现   
*/   
pos.connect(pis);   
} catch (IOException e){   
e.printStackTrace();   
}   
/**   
*
创建生产者线程   
*/   
Producer p = newProducer(pos);   
/**   
*
创建消费者线程   
*/   
Consumer c = newConsumer(pis);   
/**   
*
启动线程   
*/   
p.start();   
c.start();   
}   
}   
  
/**   
*
生产者线程(与一个管道输入流相关联)   
*   
*/   
class Producer extends Thread{   
private PipedOutputStreampos;   
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 PipedInputStreampis;   
public Consumer(PipedInputStreampis)   
{   
this.pis = pis;   
}   
public void run() {   
try {   
System.out.println(pis.read());   
} catch (IOException e){   
e.printStackTrace();   
}   
}   
}   

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则