Java 多线程(五)——线程通信(共享内存、管道流、wait()、notify()等)

本文介绍了Java中线程间通信的两种方式:共享内存和管道流,并详细讲解了Java中wait、notify和notifyAll方法在实现线程通信中的应用,包括同步监视器的概念和条件控制。同时,提到了使用BlockingQueue作为线程同步工具的策略。
摘要由CSDN通过智能技术生成

1 线程间通信方式

1.1 共享内存

  因为线程与父进程的其他线程共享该进程所拥有的全部资源。所以创建的线程本来就已经实现共享内存。但要注意的是,在操作共享资源时要注意实现同步机制,确保线程安全。

  例如,通过实现Runnable接口实现线程的共享变量:

package thread;

public class RunnableTest {
   
    public static void main(String[] args) {
        RunnableThread runnableThread = new RunnableThread();
        new Thread(runnableThread).start();
        new Thread(runnableThread).start();
        new Thread(runnableThread).start();
    }
}

class RunnableThread implements Runnable{
    // 多个线程之间共享num
    int num = 0;
    @Override
    synchronized public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + ":" + num++);
        }
    }
}

也可以通过内部类的形式来共享变量:

package thread;

/**
 * 通过内部类实现线程的共享变量
 */
public class InnerShareThread {
   
    public static void main(String[] args) {
        MyThread mythread = new MyThread();
        mythread.getThread().start();
        mythread.getThread().start();
        mythread.getThread().start();
    }
}
class MyThread {
    int num = 0;
    private class InnerThread extends Thread {
   
        public synchronized void run() {
            for (int i = 0; i < 100; i++) {
                System.out.println(Thread.currentThread().getName()
                        + ":" + num++);
            }
        }
    }
    public Thread getThread() {
        return new InnerThread();
    }
}

1.2 管道流

  管道流过程:生产者向管道中输出数据,消费者从管道中读取数据。当然,生产者的管道输出要与消费者的管道输入进行连接。

package thread;

import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;

public class CommunicateWhitPiping {
   
    public static void main(String[] args) {
        // 创建管道输出流
        PipedOutputStream pipedOutputStream = new PipedOutputStream();
        
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值