当前位置:首页 » 编程语言 » java线程通信

java线程通信

发布时间: 2022-09-06 14:58:15

java中怎么实现两个线程的信息传递

java两个线程之间可以通过使用全局变量,然后使用set和get方法就可以传递变量,实例如下:

publicstaticStringpub="";
publicstaticvoidmain(String[]args){
finalThreadt2=newThread(){
@Override
publicvoidrun(){
//打印线程1传递过来的值
System.out.println(pub);
}
};
Threadt1=newThread(){
@Override
publicvoidrun(){
Stringthread1="thread1";
//将值thread1传递给线程2
pub=thread1;
t2.start();
}
};
t1.start();
}

Ⅱ java一个线程中开启另一个线程如何通信

一个办法,直接把set方法写在run函数里,一个办法直接运行run,不过这就不是线程了,一个办法加锁

Ⅲ java线程间通信有几种方式

由于线程A和线程B持有同一个MyObject类的对象object,尽管这两个线程需要调用不同的方法,但是它们是同步执行的,比如:线程B需要等待线程A执行完了methodA()方法之后,它才能执行methodB()方法。这样,线程A和线程B就实现了 通信。

Ⅳ JAVA线程间通信的几种方式

Java多线程间的通信

Java还提供了一种线程间通信的机制,这种通信通什么实现?
wait,notify等机制
或使用pipeInputStream和pipeOutputStream

1. 线程的几种状态
线程有四种状态,任何一个线程肯定处于这四种状态中的一种:
1) 产生(New):线程对象已经产生,但尚未被启动,所以无法执行。如通过new产生了一个线程对象后没对它调用start()函数之前。
2) 可执行(Runnable):每个支持多线程的系统都有一个排程器,排程器会从线程池中选择一个线程并启动它。当一个线程处于可执行状态时,表示它可能正处于线程池中等待排排程器启动它;也可能它已正在执行。如执行了一个线程对象的start()方法后,线程就处于可执行状态,但显而易见的是此时线程不一定正在执行中。
3) 死亡(Dead):当一个线程正常结束,它便处于死亡状态。如一个线程的run()函数执行完毕后线程就进入死亡状态。
4) 停滞(Blocked):当一个线程处于停滞状态时,系统排程器就会忽略它,不对它进行排程。

Ⅳ 如何将一个东西发送给多个人Java线程通信

传统的进程间通信的方式有大致如下几种:
(1) 管道(PIPE)
(2) 命名管道(FIFO)
(3) 信号量(Semphore)
(4) 消息队列(MessageQueue)
(5) 共享内存(SharedMemory)
(6) Socket
Java如何支持进程间通信。我们把Java进程理解为JVM进程。很明显,传统的这些大部分技术是无法被我们的应用程序利用了(这些进程间通信都是靠系统调用来实现的)。但是Java也有很多方法可以进行进程间通信的。
除了上面提到的Socket之外,当然首选的IPC可以使用Rmi,或者Corba也可以。另外Java nio的MappedByteBuffer也可以通过内存映射文件来实现进程间通信(共享内存)。

Ⅵ java线程间通信问题

import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicInteger;

public class ThreadDemo {

/**
* Semaphore 就是大学操作系统里面讲的信号量, 其方法acquire和release分别对应PV操作
* AtomicInteger 是原子变量,对它的操作会转化为底层的原语(不可分割的操作),这样多线程并发对其操作就不会有问题,
* 如果是普通的int就还要加锁才能保证没问题
*/
public static void main(String[] args) throws InterruptedException {
// 用于启动另一个线程
Semaphore startThread = new Semaphore(1);
// 用于控制终止程序
AtomicInteger threadCount = new AtomicInteger(0);

for (int i = 1; i <= 10; i++) {
CountThread t = new CountThread("Thread" + i, startThread,
threadCount);
t.start();
}
}
}

class CountThread extends Thread {
// 线程标识
private String label;
// 用于启动另一个线程
private Semaphore startThread;
// 用于控制终止程序
private AtomicInteger threadCount;

public CountThread(String label, Semaphore startThread,
AtomicInteger threadCount) {
this.label = label;
this.startThread = startThread;
this.threadCount = threadCount;
}

public void run() {
try {
// 等待线程被唤醒
startThread.acquire();

System.out.println("------线程:" + label + " 开始工作------");
} catch (InterruptedException e) {
e.printStackTrace();
}

int num = 0;
while (true) {
System.out.println("线程:" + label + "计数:" + num);
// 计数到5
if (num++ == 5) {
// 唤醒另一个计数线程
startThread.release();
// 10的时候程序终止, incrementAndGet是递增(也就是++操作), 再取值
if (threadCount.incrementAndGet() == 10) {
System.exit(1);
}
}
}
}
}

研究Java并发,强烈推荐你看《Java并发编程实践》

Ⅶ Java线程之间如何通信

  • volatile修饰的变量具有可见性。可见性也就是说一旦某个线程修改了该被volatile修饰的变量,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,可以立即获取修改之后的值。在Java中为了加快程序的运行效率,对一些变量的操作通常是在该线程的寄存器或是CPU缓存上进行的,之后才会同步到主存中,而加了volatile修饰符的变量则是直接读写主存。

  • volatile禁止指令重排 ,指令重排是指处理器为了提高程序运行效率,可能会对输入代码进行优化,它不保证各个语句的执行顺序同代码中的顺序一致,但是它会保证程序最终执行结果和代码顺序执行的结果是一致的。指令重排序不会影响单个线程的执行,但是会影响到线程并发执行的正确性。程序执行到volatile修饰变量的读操作或者写操作时,在其前面的操作肯定已经完成,且结果已经对后面的操作可见,在其后面的操作肯定还没有进行。

  • synchronized可作用于一段代码或方法,既可以保证可见性,又能够保证原子性。可见性体现在:通过synchronized或者Lock能保证同一时刻只有一个线程获取锁然后执行同步代码,并且在释放锁之前会将对变量的修改刷新到主存中。
    原子性表现在:要么不执行,要么执行到底。

  • 总结

  • 从而我们可以看出volatile虽然具有可见性但是并不能保证原子性。

  • 性能方面,synchronized关键字是防止多个线程同时执行一段代码,就会影响程序执行效率,而volatile关键字在某些情况下性能要优于synchronized。

  • 但是要注意volatile关键字是无法替代synchronized关键字的,因为volatile关键字无法保证操作的原子性。

Ⅷ 云南电脑培训分享Java线程的知识要点

一、进程的概念

进程表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并给它分配资源,包括内存空间、磁盘空间、I/O设备等。然后,把该进程放入就绪队列。进程调度程序选中它,为它分配CPU以及其他有关的资源,该进程才真正运行。所以,云南电脑培训http://www.kmbdqn.com/发现进程是系统中的并发执行的单位。

二、线程的概念

线程:(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

三、引用线程的优势

(1)易于调度。

(2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分或相同部分。

(3)开销少。创建线程比创建进程要快,所需开销很少。

(4)利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行。

四、进程与线程的关系

(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。

(3)处理机分给线程,即真正在处理机上运行的是线程。

(4)线程在执行过程中,要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

简单来说:

1、一个程序至少有一个进程,一个进程至少有一个线程。

2、进程在执行过程中拥有独立的资源,而多个线程共享进程中的资源。


Ⅸ Java中线程间怎么通讯什么叫僵死线程

死锁?两个线程互相占着资源,其中一个sleep了就死那了

Ⅹ java中为什么线程通信的方法wait(), notify()和notifyAll()被定义在Object类里

Java的每个对象中都有一个锁(monitor,也可以成为监视器) 并且wait(),notify()等方法用于等待对象的锁或者通知其他线程对象的监视器可用。在Java的线程中并没有可供任何对象使用的锁和同步器。
这就是为什么这些方法是Object类的一部分,这样Java的每一个类都有用于线程间通信的基本方法

热点内容
聊天软件编程 发布:2024-09-17 03:00:07 浏览:725
linuxoracle安装路径 发布:2024-09-17 01:57:29 浏览:688
两个安卓手机照片怎么同步 发布:2024-09-17 01:51:53 浏览:207
cf编译后没有黑框跳出来 发布:2024-09-17 01:46:54 浏览:249
安卓怎么禁用应用读取列表 发布:2024-09-17 01:46:45 浏览:524
win10设密码在哪里 发布:2024-09-17 01:33:32 浏览:662
情逢敌手迅雷下载ftp 发布:2024-09-17 01:32:35 浏览:337
安卓如何让软件按照步骤自动运行 发布:2024-09-17 01:28:27 浏览:197
Z包解压命令 发布:2024-09-17 01:27:51 浏览:221
吉林ipfs存储服务器云主机 发布:2024-09-17 01:27:38 浏览:685