- 浏览: 468603 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
mrshen:
很棒,在其他大神的博客上理清了思路看懂之后,来lz这里用例子学 ...
RED-BLACK(红黑)树的实现TreeMap源码阅读 -
a939639017:
yanf4j check不下来 ?
Java nio 2.0 AIO -
hellostory:
又是抄来的 - -
mysql分表方案 -
davidluoye:
为什么不说下支持的数据库呢?
模糊查询的优化 -
oliveevilo:
表示没看懂
Synchronized和java.util.concurrent.locks.Lock的区别
不同线程间进行通信通常有两种简单方法:
方法一 通过访问共享变量的方式(注:需要处理同步问题)
方法二 通过管道流
其中方法一有两种实现方法,即
方法一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.}
方法一 通过访问共享变量的方式(注:需要处理同步问题)
方法二 通过管道流
其中方法一有两种实现方法,即
方法一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.}
发表评论
-
Integer“==”和Integer“equals”
2013-09-01 12:37 1278以前有碰到Integer“==”和Integer“eq ... -
java枚举类型enum的使用
2013-08-07 09:57 8994分类: java2011-04-24 23:17 6 ... -
线上TOMCAT,JAVA参数配置
2013-06-08 11:57 1352export JAVA_HOME=/export/serve ... -
HttpUrlConnection不能设置Host
2013-06-05 18:01 2764调试了一天终于找到原因了,奶奶的!! 测试就报503错误, ... -
Java访问https接口实现
2013-03-05 22:06 4786用两种方式分别实现了,第一种是jdk原生的,代码稍微多点, ... -
深入理解HASHMAP
2013-01-06 11:48 1071Hashmap是一种非常常用的、应用广泛的数据类型,最近研究到 ... -
Commons-Validator验证框架2
2012-11-29 14:00 1425Commons-Validator 博客分类: java ... -
java concurrent 探秘
2012-08-06 16:44 894我们都知道,在JDK1.5 ... -
ReentrantLock与syncronized的不同
2012-08-06 14:22 1170ReentrantLock 一个可重入的互斥锁定 ... -
log4j 日志大小
2012-08-03 17:47 1922今天群里一个哥们问一个问题: 我想先控制每天日 ... -
Apache Commons 包含的开源的工具类介绍
2012-07-24 10:17 1258原文地址:http://blog.csdn.n ... -
JAVA工具类之Apache的Commons Lang和Beanutils
2012-07-24 10:09 1424Apache Commons包估计是Java中使用最广发的工具 ... -
批处理启动JAVA程序(多JAR包)
2012-06-16 11:01 2280JavaJVMF# . 直接给出代码吧,下面是我自己为一个端口 ... -
中高级技术人员面试
2012-08-06 14:23 1360struts,spring,hiberate知识点。实际上对于 ... -
IO深度解析
2011-11-04 15:49 1157http://www.ibm.com/developerwor ... -
线程局部存储Thread Local Storage-TLS(总结整理)
2011-10-27 18:18 1781在线程的学习中我们知道每个线程除了共享进程的资源外还拥有各 ... -
正确理解ThreadLocal
2011-10-27 18:17 892http://www.iteye.com/topic/1038 ... -
读源码的建议
2011-10-11 22:01 1375才在论坛不经意间,看到有关源码阅读的帖子。回想自己前几年,阅读 ... -
java synchronized详解
2011-09-02 13:53 920Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候 ... -
开发中的陷阱
2011-09-02 09:58 9251. 虚拟机对字符串的处理 虚拟机是将字符串直 ...
相关推荐
是一个java线程通讯的实例,它包括2个线程,通过变量来通讯,打印个金字塔
在"JAVA100例之实例64 JAVA线程间通讯"这个主题中,我们将深入探讨Java中实现线程间通信的几种主要方法。 1. **共享数据**:最直观的线程间通信方式是通过共享内存空间,即共享变量。只要对共享变量的操作是线程...
其中,wait()和notify()方法是Java语言中实现多线程通信和等待机制的两个核心方法。 wait()方法是Object类的一个方法,用来将当前线程置入“预执行队列”中,并且在wait()所在的代码行处停止执行,直到接到通知或被...
本实例探讨的是如何利用Java的Socket实现TCP(Transmission Control Protocol)协议下的多线程通讯,允许一个服务端同时处理多个客户端的连接请求。 首先,TCP是一种面向连接的、可靠的、基于字节流的传输层通信...
本源代码是博客《Java 多线程编程之六:线程之间的通信(附源代码)》附带的实例性源代码。原博客链接地址:http://blog.csdn.net/defonds/archive/2010/01/26/5257301.aspx。
Java Socket 多线程通信是网络编程中的一个重要概念,它允许两个或多个应用程序通过TCP/IP进行数据交换。在这个示例中,我们创建了一个双向通信的系统,即双工通信,这意味着数据可以在两个方向上同时传输。这样的...
Java的多线程是编程中的一个关键概念,特别是在并发处理和高性能应用中。本文将深入讲解如何在Java中实现多线程以及线程间的通信。 首先,我们要理解一个虚假的多线程示例。在例1中,创建了两个`TestThread`对象,...
综上所述,Java即时通讯客户端的开发涵盖了众多的技术领域,包括Java基础、网络编程、UI设计、多线程、协议实现、安全性和测试等,开发者需要全面掌握这些技能才能构建出高效、稳定的即时通讯系统。
Java中的线程间通信是多线程编程中的关键部分,以确保不同线程之间的协作和数据交换。在Java中,管道(Pipe)流提供了一种有效的方法,允许数据从一个线程传递到另一个线程,从而实现线程间的通信。管道通常由两个流...
Disruptor是一款由LMAX交易所开发的开源Java框架,它专为高并发环境下的线程间通信设计,致力于提供极低的延迟和高效的性能。在Java开发中,尤其是在需要处理大量并发请求的系统中,Disruptor是一个重要的工具,它...
Java多线程聊天室是一个基于Java编程语言实现的实时通讯应用,它利用多线程技术来处理并发用户连接和通信。在这个项目中,有至少两个关键的类:Server和Control,它们分别扮演着服务器端和客户端控制台的角色。在...
接着,为了实现消息的发送和接收,Java即时通讯系统会使用线程处理并发连接。每个客户端连接都会分配一个独立的线程,以便服务器可以同时处理多个用户的请求。这种多线程模型是Java并发处理的一大优势,确保了系统的...
标题中的“net.rar_java 聊天_java 通讯 多线程_白板”表明这是一个关于Java编程的项目,具体涉及网络通信、聊天功能、多线程以及白板同步。这个项目很可能是一个简单的点对点(P2P)通信应用程序,用户可以通过它...
Java网络通讯代码是Java编程领域中的一个重要主题,它涉及到如何通过网络在不同的计算机之间交换数据。这个主题涵盖了许多核心技术,包括套接字编程、HTTP协议、TCP/IP通信以及多线程等。对于初学者来说,理解和掌握...
故另外开启一个线程,用于接受客户端的socket消息。服务器在收到一个socket连接之后,把该socket保存到队列中,并对队列中的每个socket开启各自的读写线程。测试可以在不同控制台运行server和client,服务器接收消息...
在Java USB串口通讯中,还需要关注一些关键概念和问题,如异常处理、流控制、多线程同步,以及如何处理硬件中断。此外,对于Modbus协议,理解其数据结构、功能码和错误处理也非常重要。在实际应用中,通常需要结合...
Java 线程知识点总结 Java 线程是一种轻量级的进程...本文总结了 Java 线程的基本概念、创建线程的方式、多线程的运行特性、五种线程状态、同步机制和线程间通讯等知识点,为读者提供了一个系统的 Java 线程知识框架。
Java 多线程间的通信是Java并发编程中的一个重要概念,主要解决的是线程间协作的问题。在多线程环境中,不同线程可能需要共享资源或按照特定顺序执行任务,这时就需要线程之间的通信来协调执行流程。传统的同步机制...
在本文中,我们将深入探讨一个基于Java实现的初级即时通讯软件雏形V1.1,它关注线程安全和局域网内的通信功能。 首先,线程安全是多线程编程中的一个重要概念,确保在并发环境中多个线程访问共享资源时不会导致数据...