package com.hym.test.thread;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class BigPlate {
/** 装鸡蛋的盘子,大小为5 */
private BlockingQueue<Object> eggs = new ArrayBlockingQueue<Object>(5);
/** 放鸡蛋 */
public void putEgg(Object egg) {
try {
eggs.put(egg);// 向盘子末尾放一个鸡蛋,如果盘子满了,当前线程阻塞
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("放入鸡蛋");
}
/** 取鸡蛋 */
public Object getEgg() {
Object egg = null;
try {
egg = eggs.take();// 从盘子开始取一个鸡蛋,如果盘子空了,当前线程阻塞
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("拿到鸡蛋");
return egg;
}
/** 放鸡蛋线程 */
static class AddThread extends Thread {
private BigPlate plate;
private Object egg = new Object();
public AddThread(BigPlate plate) {
this.plate = plate;
}
public void run() {
plate.putEgg(egg);
}
}
/** 取鸡蛋线程 */
static class GetThread extends Thread {
private BigPlate plate;
public GetThread(BigPlate plate) {
this.plate = plate;
}
public void run() {
plate.getEgg();
}
}
public static void main(String[] args) {
BigPlate plate = new BigPlate();
// 先启动10个放鸡蛋线程
for (int i = 0; i < 10; i++) {
new Thread(new AddThread(plate)).start();
}
// 再启动10个取鸡蛋线程
for (int i = 0; i < 10; i++) {
new Thread(new GetThread(plate)).start();
}
}
}
分享到:
相关推荐
《Java线程(第三版)》是一本深入探讨Java线程技术的专业书籍,旨在帮助开发者理解和掌握Java平台上的多线程编程。Java线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而充分利用系统资源,提高程序的...
Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而提高系统效率和响应速度。在Java中,线程可以分为用户线程和守护线程,前者是程序运行的基础,而后者是在所有用户线程结束时才终止的后台...
本资源"JAVA线程学习(源代码)"提供了关于Java线程的源代码示例,帮助我们深入理解和实践线程的使用。 首先,我们要理解Java中的线程模型。Java线程由`java.lang.Thread`类或`java.util.concurrent.Executor`框架来...
在Java编程中,`BlockingQueue`(阻塞队列)是一种重要的并发工具,它结合了队列的数据结构和线程同步机制。`BlockingQueue`接口位于`java.util.concurrent`包中,提供了线程安全的数据结构,可以用于实现生产者-...
### Java线程培训资料知识点详解 #### 一、Java线程基本概念 1. **如何编写与启动线程** - **方式一:继承Thread类** ```java class MyThread extends Thread { @Override public void run() { // 业务逻辑 ...
Java多线程BlockingQueue实现生产者消费者模型详解 Java多线程中,生产者消费者模型是非常重要的一种设计模式,它可以解决多线程之间的数据传输问题。在Java中,我们可以使用BlockingQueue来实现生产者消费者模型,...
Java线程是多任务编程的重要概念,特别是在Java这种支持并发执行的高级编程语言中。Java线程允许程序同时执行多个独立的代码段,这极大地提高了程序的效率和响应性。以下是对Java线程入门的详细讲解: 1. **线程的...
8. **并发集合类**:Java提供了并发安全的集合类,如`ConcurrentHashMap`, `CopyOnWriteArrayList`, `BlockingQueue`等,它们内部实现了线程安全的算法,可以在多线程环境下高效使用。 9. **线程中断**:`interrupt...
在"JAVA100例之实例64 JAVA线程间通讯"这个主题中,我们将深入探讨Java中实现线程间通信的几种主要方法。 1. **共享数据**:最直观的线程间通信方式是通过共享内存空间,即共享变量。只要对共享变量的操作是线程...
Java线程是Java编程中的重要概念,它允许程序同时执行多个任务,从而提高了程序的效率和响应性。在Java中,线程是程序执行的最小单位,由Java虚拟机(JVM)管理。本教程将深入讲解Java线程的基础知识,帮助你掌握多...
此外,Java 5引入了BlockingQueue阻塞队列,它是一种线程安全的数据结构,线程可以等待队列中有数据可取或等待队列有空位可存,常用于生产者-消费者模型。 线程阻塞是指线程在运行过程中因为某些原因无法继续执行,...
#### 一、Java线程:概念与原理 - **操作系统中线程和进程的概念** 当前的操作系统通常都是多任务操作系统,多线程是一种实现多任务的方式之一。在操作系统层面,进程指的是内存中运行的应用程序,每个进程拥有...
此外,还有java.util.concurrent工具包,包含如BlockingQueue等高级并发结构,它们简化了线程间的协作和数据传递。 死锁是多线程中的一个常见问题,当两个或更多线程相互等待对方释放资源而无法继续执行时,就会...
Java的BlockingQueue接口(如ArrayBlockingQueue)非常适合实现这一模型,它提供了线程安全的数据插入和移除操作。 在实例中提到的"全部开始 全部停止 单个停止"可能涉及到线程的启动和控制,这可以通过控制线程的...
Java线程是Java编程语言中的一个关键概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,线程是程序执行的最小单元,由JVM(Java虚拟机)来管理和调度。Java线程的入门学习至关重要,...
Java的BlockingQueue阻塞队列可以实现线程间的生产者-消费者模式,通过put()和take()方法实现数据的传递。此外,Phaser、CyclicBarrier和CountDownLatch等同步辅助类也是线程间协调的重要工具。 线程池是Java并发...
#### 一、Java线程:概念与原理 1. **操作系统中线程和进程的概念** - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个进程拥有独立的内存空间。...
Java提供了多种线程间通信的手段,如`BlockingQueue`、`Future`、`ExecutorService`等。其中,`wait()`, `notify()`, `notifyAll()`是基于对象监视器的通信方式,用于在线程间传递信号。`BlockingQueue`则提供了...
另外,java.util.concurrent包中的BlockingQueue等阻塞队列可以用来实现线程间的通信和数据交换,它在生产者-消费者模式中非常有用。 在实际开发中,使用Java多线程技术时,开发者可能会面临一些挑战,比如线程安全...