小例子:创建三个线程A,B,C, A线程循环10次,接着B线程再循环10次,然后C线程再循环10次,然后A线程又循环10次,如此循环往复50次。
代码如下:
public class ThreeThreadCommunication { public static void main(String[] args) { final Business business = new Business(); new Thread(new Runnable() { @Override public void run() { for(int i = 1; i <= 50; i++){ business.sub1(i); } } }).start(); new Thread(new Runnable() { @Override public void run() { for(int i = 1; i <= 50; i++){ business.sub2(i); } } }).start(); new Thread(new Runnable() { @Override public void run() { for(int i = 1; i <= 50; i++){ business.sub3(i); } } }).start(); } } class Business{ Lock lock = new ReentrantLock(); Condition condition1 = lock.newCondition(); Condition condition2 = lock.newCondition(); Condition condition3 = lock.newCondition(); private int flag = 1; public void sub1(int j){ lock.lock(); try{ while(flag != 1){ condition1.await(); } for(int i = 1;i <= 10;i++){ System.out.println("sub1 thread sequence of " + i + ",loop of " + j); } flag = 2; condition2.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } public void sub2(int j){ lock.lock(); try{ while(flag != 2){ condition2.await(); } for(int i = 1; i <= 10; i++){ System.out.println("sub2 thread sequence of " + i + ",loop of " + j); } flag = 3; condition3.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } public void sub3(int j){ lock.lock(); try{ while(flag != 3){ condition3.await(); } for (int i = 1; i <= 10; i++) { System.out.println("sub3 thread sequence of " + i + ",loop of " + j); } flag = 1; condition1.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } }
相关推荐
本笔记全面涵盖了多线程的学习,包括基础理论和实践代码,旨在帮助开发者深入理解并掌握Java多线程技术。 一、线程基础知识 线程是操作系统分配CPU时间的基本单位,一个进程中可以包含多个线程。Java通过`Thread`类...
本笔记主要围绕尚硅谷周阳老师的JUC课程展开,旨在帮助个人学习者深入理解和掌握Java并发编程的核心知识。 1. **并发基础** - **线程与进程**:线程是程序执行的最小单位,进程则是资源分配的基本单位。了解它们的...
- **wait()和notify()/notifyAll()**:在线程同步的基础上实现线程间的通信,需在同步代码块或同步方法中使用。 - **Condition接口**:ReentrantLock提供的条件变量,可以创建多个条件,实现更细粒度的线程唤醒和...
这份"C++多线程学习笔记1"涵盖了基础到进阶的多线程概念,旨在帮助初学者快速掌握这一关键技能。 首先,C++11引入了对多线程的支持,引入了`<thread>`库,使得创建和管理线程变得简单。创建一个新的线程可以使用`...
这份学习笔记资料无疑涵盖了Java学习的广泛领域,从入门到精通,包括基本语法、面向对象编程、集合框架、异常处理、IO流、线程与并发,再到Spring框架的应用,是一份非常全面的学习资源。通过深入研读和实践,读者...
《Java JDK 7学习笔记》将IDE操作纳为教学内容之一,使读者能与实践结合,提供的视频教学能更清楚地帮助读者掌握操作步骤。 内容简介 书籍 计算机书籍 《java jdk 7学习笔记》是作者多年来教学实践经验的总结...
Java并发编程是Java开发中的重要领域,它涉及到多线程、同步、锁机制、线程池等关键概念,是提高程序性能和效率的关键技术。在Java中,并发编程的运用可以充分利用多核处理器的能力,实现高效的多任务处理。以下是对...
9. **管程(Monitor)**:Monitor是Java中的一种同步机制,确保同一时间只有一个线程可以访问特定的代码块或数据。Monitor通常通过synchronized关键字实现,Java对象实例都与一个Monitor对象关联。 10. **用户线程...
线程学习实例和笔记主要探讨的是如何在程序设计中有效利用线程来提高性能和响应速度。这里我们将深入讨论线程的概念、创建与管理、并发控制以及相关工具的使用。 一、线程基础 线程是程序执行的流程,一个进程可以...
- 掌握线程同步机制,如synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock接口和Condition接口。 5. **内存管理与垃圾回收** - 理解Java内存模型,包括堆、栈、方法区、程序计数器等。 - 垃圾...
- **条件变量(Condition Variables)**:配合互斥锁,通过`pthread_cond_wait()`和`pthread_cond_signal()`实现线程的等待与唤醒。 - **读写锁(Read-Write Locks)**:`pthread_rwlock_init()`, `pthread_rwlock...
尚硅谷宋红康的学习笔记涵盖了多个关键领域,包括面向对象、集合、I/O流、多线程、反射与动态代理以及Java的最新特性。以下是对这些主题的详细说明: 1. **面向对象(上、中、下)**:面向对象是Java的核心概念,...
线程同步机制包括synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock接口和Condition接口。 11. **网络编程**:Java提供了Socket和ServerSocket类进行TCP通信,DatagramSocket和DatagramPacket类...
线程同步机制包括synchronized关键字、wait/notify、Lock和Condition等。 10. **网络编程**:Java提供了Socket和ServerSocket类进行TCP/IP通信,以及DatagramSocket和MulticastSocket支持UDP协议。 11. **反射**:...
9. **多线程**:Java内置对多线程的支持,通过Thread类或实现Runnable接口创建线程,同步机制包括synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock和Condition接口。 10. **反射**:允许在运行时...
同步机制如`synchronized`关键字、`wait()`, `notify()`和`notifyAll()`方法,以及`Lock`接口和`Condition`接口,用于避免线程间的竞态条件和死锁。 10. **网络编程**:Java的`java.net`包提供了网络编程所需的基本...
配合互斥锁使用,可以实现线程间的同步和通信。 3. **读写锁**:允许多个读取线程同时访问资源,但写入时会独占资源。适用于读多写少的场景。 **线程 join 和 detach** - **pthread_join()**:主线程或其他线程...
同步机制包括synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock和Condition接口。 七、网络编程 Java的Socket和ServerSocket类提供了网络通信的基础。通过建立连接,客户端和服务器端可以交换数据...
线程同步机制包括synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock和Condition接口。 9. **网络编程** Java提供了Socket和ServerSocket类进行客户端和服务器端的网络通信。 10. **反射** 反射...