不同线程间进行通信通常有两种简单方法:
方法一 通过访问共享变量的方式(注:需要处理同步问题)
方法二 通过管道流
其中方法一有两种实现方法,即
方法一a)通过内部类实现线程的共享变量
代码如下:
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();
}
}
}
# 方法二:
# 代码如下
# 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编程中,多线程通信是一个重要的概念,特别是在并发编程中。`ThreadDemo`示例可能演示了如何在不同的线程之间有效地传递信息。线程通信是解决多个执行流同步和协作的关键,确保数据的一致性和正确性。以下是...
在Java编程中,多线程通信是一个至关重要的概念,特别是在并发编程中,它涉及到线程间的协作和数据共享。线程通信安全问题是指在多线程环境下,如何保证多个线程对共享资源进行访问时的正确性和一致性。在这个场景下...
在Java编程中,多线程通信是一个至关重要的概念,特别是在设计高效的并发应用程序时。这个"Java线程通信示例源代码"很可能包含了演示如何在不同线程之间共享数据和协调执行顺序的实例。线程通信主要涉及两个核心概念...
在计算机科学中,进程线程通信、线程同步与异步以及进程间的通信是操作系统核心概念,对于理解和优化多任务并行处理至关重要。这些概念在软件开发,尤其是并发编程领域中占据着举足轻重的地位。 首先,让我们来探讨...
在Qt框架下,UDP(User Datagram Protocol)的线程通信是一种常见的网络编程需求,它涉及到多线程技术、网络编程以及Qt的相关库。本篇将深入解析如何在Qt环境中使用线程来实现UDP通信。 首先,理解UDP协议是至关...
在本文中,我们将深入探讨如何使用Visual Studio 2017和C++来实现TCP套接字的多线程通信。TCP(传输控制协议)是一种面向连接、可靠的、基于字节流的通信协议,广泛应用于互联网上的各种服务。多线程技术则允许我们...
在C++编程中,多线程通信是并发执行任务时必不可少的一个环节,它涉及到线程间的同步和数据共享。在本篇文章中,我们将深入探讨如何在C++中实现多线程通信,以及相关的同步机制和数据交换策略。 一、线程创建与管理...
在计算机科学领域,尤其是软件开发中,多线程通信是一个重要的概念,特别是在处理并发任务和优化性能时。本文将深入探讨计算机网络中的多线程通信,以Java编程语言为例,结合"MT_WebServer"这一文件,来阐述如何实现...
多线程通信和等待机制 多线程通信和等待机制是多线程编程中一个重要的概念,它们都是基于线程之间的同步和协作来实现的。其中,wait()和notify()方法是Java语言中实现多线程通信和等待机制的两个核心方法。 wait()...
线程通信:使用消息实现线程通信,一个了解多线程与消息通信的例子,以下是实现的主要代码: LRESULT CThreadCommunicationDlg::OnDisplayResult(WPARAM wParam,LPARAM lParam) { int nResult = (int)wParam; ...
然而,多线程编程也带来了数据同步和线程通信的问题,以防止数据冲突和竞态条件。本教程将深入探讨四种常见的线程同步机制:事件对象、信号量、互斥量以及临界区,帮助开发者理解和掌握如何在VC++中安全地实现多线程...
Linux下C开发之线程通信 在Linux平台下,线程通信是C开发中一个非常重要的方面。本文将详细介绍Linux下C开发之线程通信的相关知识点,包括线程概念、线程创建、线程控制、线程通信和线程同步等。 一、线程概念 在...
线程通信是多线程编程中的一个重要概念,它是指在并发执行的多个线程之间交换信息的方式。在Java等编程语言中,线程通信通常用于解决共享数据的问题,确保线程间的协作和同步,防止数据竞争和死锁等问题。本资料“用...
在Java编程中,多线程通信是构建高效并发应用程序的关键技术。服务器多线程通信尤其重要,因为它允许服务器同时处理多个客户端请求,提高系统资源利用率并优化响应时间。本篇文章将深入探讨Java中的多线程通信,以及...
在IT领域,线程通信是多线程编程中的核心概念,特别是在复杂的系统设计中,如图书管理系统。线程通信指的是不同线程之间交换信息或同步执行的过程,以确保数据的一致性和程序的正确运行。本篇文章将深入探讨线程通信...
在Android应用开发中,线程通信是至关重要的一个环节,它涉及到UI线程与工作线程之间的数据交换和控制流程。本教程将深入探讨Android线程通信的基本概念、常用方法以及如何通过Demo来实践这些技术。 一、Android...
在多线程编程中,线程通信是一个至关重要的概念,特别是在并发执行任务时,确保不同线程间的协作和数据同步。本教程将聚焦于利用事件对象进行线程间的通信,这是实现多线程同步的一种常见方法。 事件对象,通常称为...
在VC++编程环境中,线程通信是多线程应用程序中不可或缺的一部分,特别是在需要同步或定时操作的场景下。本文将深入探讨如何利用VC++实现线程间的通信,并以计时器为例来阐述这一过程。 首先,理解线程通信的基本...
Socket多线程通信是网络编程中的重要组成部分,它允许服务器端和客户端进行高效的数据交互。在实际应用中,如在线聊天、文件传输等场景,往往需要用到多线程来提高并发处理能力,使得服务端可以同时处理多个客户端的...