java中的多线程
来源:互联网 发布:水质监测数据分析 编辑:程序博客网 时间:2024/06/05 16:11
该例子用于测试多线程中的wait方法和notify方法,以及同步方法
package testthread;
/**
* 店员从生产者取货,消费者从店员取货,店员最多只能存放20个产品,当产品不够20个需通知生产者生产,超过20个时停止消费
* @author Passenger
*
*/
//店员类
class Clerk {
int proNum;
//添加产品
public synchronized void addProduct(){
if(proNum>=20){
try {
//如果产品超过20件就停止生产
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
proNum++;
System.out.println(Thread.currentThread().getName() + " 生产了产品,还剩下: " + proNum);
//生产了商品后唤醒消费者去消费
notifyAll();
}
}
//消费产品
public synchronized void conProduct(){
if(proNum<=0){
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
proNum--;
System.out.println(Thread.currentThread().getName() + " 消费了产品,还剩下: " + proNum);
notifyAll();
}
}
}
//新建一个生产者类
class Productor implements Runnable{
//new一个clerk对象,用于操作clerk对象中的proNum
Clerk clerk = null;
public Productor(Clerk clerk){
this.clerk = clerk;
}
@Override
public void run() {
while(true){
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
clerk.addProduct();
}
}
}
//消费者类
class Consumer implements Runnable {
Clerk clerk = null;
public Consumer(Clerk clerk){
this.clerk = clerk;
}
@Override
public void run() {
while (true) {
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
clerk.conProduct();
}
}
}
public class TestProduce1 {
public static void main(String[] args) {
Clerk clerk = new Clerk();
Consumer consumer = new Consumer(clerk);
Productor productor = new Productor(clerk);
//生产者和消费者线程
Thread conThread = new Thread(consumer);
Thread proThread = new Thread(productor);
//设置线程名
conThread.setName("conThread");
proThread.setName("proThread");
//开始执行多线程
conThread.start();
proThread.start();
}
}
- Java 程序中的多线程
- Java 程序中的多线程
- Java 程序中的多线程
- Java程序中的多线程
- java中的多线程
- Java中的多线程(一)
- Java 程序中的多线程
- Java中的多线程程序设计
- Java 程序中的多线程
- Java 程序中的多线程
- Java 程序中的多线程
- Java 程序中的多线程
- Java 程序中的多线程
- 再忆Java中的多线程
- Java中的多线程
- Java中的多线程
- Java中的多线程编程
- Java中的多线程编程
- 浅谈Android响应式编程与Rxjava
- 行为型模式-命令(command)
- 实体类的高级应用
- MATLAB全部随机函数
- 动态规划--分段最小二乘法
- java中的多线程
- 算法导论 练习题 4.3-3
- C++(笔记)深浅拷贝and何时调用
- ①Python学习之输出菱形
- Docker基础操作命令
- uva10048 ( floyd,最大值最小化)
- Opencv学习笔记二(边缘检测及坐标转换)
- QT sendEvent()和postEvent()
- 递推递归专题 F 计算组合数