`
lxy2330
  • 浏览: 468603 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java线程通讯

    博客分类:
  • java
 
阅读更多
不同线程间进行通信通常有两种简单方法:
方法一 通过访问共享变量的方式(注:需要处理同步问题)
方法二 通过管道流

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

*/ 



Java代码 
1.public class Innersharethread {    
2.    public static void main(String[] args) {    
3.        Mythread mythread = new Mythread();    
4.        mythread.getThread().start();    
5.        mythread.getThread().start();    
6.        mythread.getThread().start();    
7.        mythread.getThread().start();    
8.    }    
9.}    
10.class Mythread {    
11.    int index = 0;    
12.   
13.    private class InnerThread extends Thread {    
14.        public synchronized void run() {    
15.            while (true) {    
16.                System.out.println(Thread.currentThread().getName()    
17.                        + "is running and index is " + index++);    
18.            }    
19.        }    
20.    }    
21.   
22.    public Thread getThread() {    
23.        return new InnerThread();    
24.    }    
25.}   
26. 
27./**
28. * 通过内部类实现线程的共享变量
29. *
30. */ 
31.public class Innersharethread { 
32.    public static void main(String[] args) { 
33.        Mythread mythread = new Mythread(); 
34.        mythread.getThread().start(); 
35.        mythread.getThread().start(); 
36.        mythread.getThread().start(); 
37.        mythread.getThread().start(); 
38.    } 
39.} 
40.class Mythread { 
41.    int index = 0; 
42. 
43.    private class InnerThread extends Thread { 
44.        public synchronized void run() { 
45.            while (true) { 
46.                System.out.println(Thread.currentThread().getName() 
47.                        + "is running and index is " + index++); 
48.            } 
49.        } 
50.    } 
51. 
52.    public Thread getThread() { 
53.        return new InnerThread(); 
54.    } 
55.} 


方法二b)通过实现Runnable接口实现线程的共享变量
代码如下
Java代码



Java代码 
1./**   
2.* 通过实现Runnable接口实现线程的共享变量   
3.* @author Administrator   
4.*   
5.*/     
6.public class Interfacaesharethread {     
7.public static void main(String[] args) {     
8.Mythread mythread = new Mythread();     
9.new Thread(mythread).start();     
10.new Thread(mythread).start();     
11.new Thread(mythread).start();     
12.new Thread(mythread).start();     
13.}     
14.}     
15.   
16./* 实现Runnable接口 */     
17.class Mythread implements Runnable {     
18.int index = 0;     
19.   
20.public synchronized void run() {     
21.while (true)     
22.System.out.println(Thread.currentThread().getName()     
23.+ "is running and the index is " + index++);     
24.}     
25.}    
26. 
27./** 
28.* 通过实现Runnable接口实现线程的共享变量 
29.* @author Administrator 
30.* 
31.*/  
32.public class Interfacaesharethread {  
33.public static void main(String[] args) {  
34.Mythread mythread = new Mythread();  
35.new Thread(mythread).start();  
36.new Thread(mythread).start();  
37.new Thread(mythread).start();  
38.new Thread(mythread).start();  
39.}  
40.}  
41. 
42./* 实现Runnable接口 */  
43.class Mythread implements Runnable {  
44.int index = 0;  
45. 
46.public synchronized void run() {  
47.while (true)  
48.System.out.println(Thread.currentThread().getName()  
49.+ "is running and the index is " + index++);  
50.}  
51.}  
52.方法二:  
53.代码如下  
54.Java代码  
55.import java.io.IOException;     
56.import java.io.PipedInputStream;     
57.import java.io.PipedOutputStream;     
58.   
59.public class CommunicateWhitPiping {     
60.public static void main(String[] args) {     
61./**   
62.* 创建管道输出流   
63.*/     
64.PipedOutputStream pos = new PipedOutputStream();     
65./**   
66.* 创建管道输入流   
67.*/     
68.PipedInputStream pis = new PipedInputStream();     
69.try {     
70./**   
71.* 将管道输入流与输出流连接   
72.* 此过程也可通过重载的构造函数来实现   
73.*/     
74.pos.connect(pis);     
75.} catch (IOException e) {     
76.e.printStackTrace();     
77.}     
78./**   
79.* 创建生产者线程   
80.*/     
81.Producer p = new Producer(pos);     
82./**   
83.* 创建消费者线程   
84.*/     
85.Consumer c = new Consumer(pis);     
86./**   
87.* 启动线程   
88.*/     
89.p.start();     
90.c.start();     
91.}     
92.}     
93.   
94./**   
95.* 生产者线程(与一个管道输入流相关联)   
96.*   
97.*/     
98.class Producer extends Thread {     
99.private PipedOutputStream pos;     
100.public Producer(PipedOutputStream pos) {     
101.this.pos = pos;     
102.}     
103.public void run() {     
104.int i = 8;     
105.try {     
106.pos.write(i);     
107.} catch (IOException e) {     
108.e.printStackTrace();     
109.}     
110.}     
111.}     
112.   
113./**   
114.* 消费者线程(与一个管道输入流相关联)   
115.*   
116.*/     
117.class Consumer extends Thread {     
118.private PipedInputStream pis;     
119.public Consumer(PipedInputStream pis)     
120.{     
121.this.pis = pis;     
122.}     
123.public void run() {     
124.try {     
125.System.out.println(pis.read());     
126.} catch (IOException e) {     
127.e.printStackTrace();     
128.}     
129.}     
130.}
分享到:
评论

相关推荐

    一个java线程通讯实例

    是一个java线程通讯的实例,它包括2个线程,通过变量来通讯,打印个金字塔

    JAVA100例之实例64 JAVA线程间通讯

    在"JAVA100例之实例64 JAVA线程间通讯"这个主题中,我们将深入探讨Java中实现线程间通信的几种主要方法。 1. **共享数据**:最直观的线程间通信方式是通过共享内存空间,即共享变量。只要对共享变量的操作是线程...

    多线程通信和等待机制.docx

    其中,wait()和notify()方法是Java语言中实现多线程通信和等待机制的两个核心方法。 wait()方法是Object类的一个方法,用来将当前线程置入“预执行队列”中,并且在wait()所在的代码行处停止执行,直到接到通知或被...

    java Socket多线程通讯实例

    本实例探讨的是如何利用Java的Socket实现TCP(Transmission Control Protocol)协议下的多线程通讯,允许一个服务端同时处理多个客户端的连接请求。 首先,TCP是一种面向连接的、可靠的、基于字节流的传输层通信...

    Java 线程通信示例源代码

    本源代码是博客《Java 多线程编程之六:线程之间的通信(附源代码)》附带的实例性源代码。原博客链接地址:http://blog.csdn.net/defonds/archive/2010/01/26/5257301.aspx。

    java socket 多线程通讯示例

    Java Socket 多线程通信是网络编程中的一个重要概念,它允许两个或多个应用程序通过TCP/IP进行数据交换。在这个示例中,我们创建了一个双向通信的系统,即双工通信,这意味着数据可以在两个方向上同时传输。这样的...

    彻底明白Java的多线程-线程间的通信.doc

    Java的多线程是编程中的一个关键概念,特别是在并发处理和高性能应用中。本文将深入讲解如何在Java中实现多线程以及线程间的通信。 首先,我们要理解一个虚假的多线程示例。在例1中,创建了两个`TestThread`对象,...

    java即时通讯客户端

    综上所述,Java即时通讯客户端的开发涵盖了众多的技术领域,包括Java基础、网络编程、UI设计、多线程、协议实现、安全性和测试等,开发者需要全面掌握这些技能才能构建出高效、稳定的即时通讯系统。

    Java中利用管道实现线程间的通讯

    Java中的线程间通信是多线程编程中的关键部分,以确保不同线程之间的协作和数据交换。在Java中,管道(Pipe)流提供了一种有效的方法,允许数据从一个线程传递到另一个线程,从而实现线程间的通信。管道通常由两个流...

    disruptor高性能Java线程间通讯库

    Disruptor是一款由LMAX交易所开发的开源Java框架,它专为高并发环境下的线程间通信设计,致力于提供极低的延迟和高效的性能。在Java开发中,尤其是在需要处理大量并发请求的系统中,Disruptor是一个重要的工具,它...

    java多线程聊天室

    Java多线程聊天室是一个基于Java编程语言实现的实时通讯应用,它利用多线程技术来处理并发用户连接和通信。在这个项目中,有至少两个关键的类:Server和Control,它们分别扮演着服务器端和客户端控制台的角色。在...

    java即时通讯系统

    接着,为了实现消息的发送和接收,Java即时通讯系统会使用线程处理并发连接。每个客户端连接都会分配一个独立的线程,以便服务器可以同时处理多个用户的请求。这种多线程模型是Java并发处理的一大优势,确保了系统的...

    net.rar_java 聊天_java 通讯 多线程_白板

    标题中的“net.rar_java 聊天_java 通讯 多线程_白板”表明这是一个关于Java编程的项目,具体涉及网络通信、聊天功能、多线程以及白板同步。这个项目很可能是一个简单的点对点(P2P)通信应用程序,用户可以通过它...

    Java网络通讯代码

    Java网络通讯代码是Java编程领域中的一个重要主题,它涉及到如何通过网络在不同的计算机之间交换数据。这个主题涵盖了许多核心技术,包括套接字编程、HTTP协议、TCP/IP通信以及多线程等。对于初学者来说,理解和掌握...

    java socket通讯例程 多线程读写 可以同时收发不同终端的消息

    故另外开启一个线程,用于接受客户端的socket消息。服务器在收到一个socket连接之后,把该socket保存到队列中,并对队列中的每个socket开启各自的读写线程。测试可以在不同控制台运行server和client,服务器接收消息...

    JAVA usb串口通讯

    在Java USB串口通讯中,还需要关注一些关键概念和问题,如异常处理、流控制、多线程同步,以及如何处理硬件中断。此外,对于Modbus协议,理解其数据结构、功能码和错误处理也非常重要。在实际应用中,通常需要结合...

    java线程知识点总结[归类].pdf

    Java 线程知识点总结 Java 线程是一种轻量级的进程...本文总结了 Java 线程的基本概念、创建线程的方式、多线程的运行特性、五种线程状态、同步机制和线程间通讯等知识点,为读者提供了一个系统的 Java 线程知识框架。

    Java 多线程间的通讯.doc

    Java 多线程间的通信是Java并发编程中的一个重要概念,主要解决的是线程间协作的问题。在多线程环境中,不同线程可能需要共享资源或按照特定顺序执行任务,这时就需要线程之间的通信来协调执行流程。传统的同步机制...

    一个java即时通讯软件的雏形V1.1

    在本文中,我们将深入探讨一个基于Java实现的初级即时通讯软件雏形V1.1,它关注线程安全和局域网内的通信功能。 首先,线程安全是多线程编程中的一个重要概念,确保在并发环境中多个线程访问共享资源时不会导致数据...

Global site tag (gtag.js) - Google Analytics