package com.hzs.basic.multithread;
/**
* @author Cherist Huan
* @version 1.0
* @date 2021/6/23 9:42
* @note 测试管程法
*/
public class TestPC {
public static void main(String[] args) {
SynContainer synContainer = new SynContainer();
new Product(synContainer).start();
new Consumer(synContainer).start();
}
}
// 产品类
class Chicken{
private int id;
public Chicken(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
//生产者
class Product extends Thread{
SynContainer synContainer ;
public Product(SynContainer synContainer){
this.synContainer = synContainer;
}
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("生产了第"+i+"个");
synContainer.push(new Chicken(i));
}
}
}
// 消费者
class Consumer extends Thread{
SynContainer synContainer ;
public Consumer(SynContainer synContainer){
this.synContainer = synContainer;
}
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("消费了第"+synContainer.pop().getId()+"个");
}
}
}
//缓冲区,容器类
class SynContainer{
// 新建一个存储数组
Chicken[] chickens = new Chicken[10];
private int count = 0; // 计数器,容器中还有多少只产品
// 生产
public synchronized void push(Chicken chicken){
// 首先,判断容器有没有满,如果满了,通知消费者消费,本身进入wait
if(count == chickens.length){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 否则,进行生产
chickens[count] = chicken;
count++;
// 通知其他线程消费
this.notifyAll();
}
// 消费者消费
public synchronized Chicken pop(){
// 首先,判断容器有没有产品,如果没有了,通知生产者进行生产,本对象进入wait
if(count <= 0)
{
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 如果有,进行消费
count--;
Chicken chicken = chickens[count];
// 通知其他线程进行生产
this.notifyAll();
return chicken;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
内容概要:通过带着读者编写Java基础语法测试代码,理解基础数据类型-注解-数组-inet-反射-oop-Java代码实现过程和测试代码 适合人群:初学java语法入门测试代码 能学到什么:①注解、数组、数据类型、inet、method的实现;②多线程、oop、反射、scanner、struct等的 阅读建议:按照例子照着做或者直接运行起来,理解吸收代码
资源推荐
资源详情
资源评论
收起资源包目录
java-test-questions-06.zip (55个子文件)
pom.xml 1KB
src
main
resources
images
6receive.jpg 1.47MB
6.jpg 1.47MB
java
com
hzs
basic
annotation
TestAnnotation.java 509B
TestAnnotation2.java 560B
reflection
Test04.java 943B
Test01.java 1KB
Test03.java 961B
Test02.java 2KB
array
MutilArray.java 709B
LowArray.java 474B
SparseArrayDemo.java 2KB
ReverseArray.java 969B
TestArray.java 439B
ArrayDemo01.java 1KB
LowArrayApp.java 563B
scanner
Demo01.java 484B
struct
SanjiaoxingDemo01.java 581B
Fordemo02.java 441B
Demo02.java 397B
ForDemo01.java 453B
oop
Application.java 232B
PolymorphicDemo01.java 337B
OverrideDemo01.java 283B
A.java 206B
MyException.java 159B
Student.java 275B
Test.java 186B
Person.java 212B
B.java 214B
datatype
Demo01.java 607B
method
Demo01.java 306B
inet
TcpClientDemo.java 2KB
TcpServerDemo.java 2KB
TalkTeacher.java 474B
TalkReceive.java 1KB
TalkStudent.java 474B
UdpServer.java 785B
demo01.java 726B
TcpUploadServer.java 2KB
UdpClient.java 808B
TalkSend.java 1KB
TcpUploadClient.java 2KB
multithread
UnsafeBuyTicket.java 1KB
TestLambda.java 1KB
DownloadUrlPicFromThread.java 2KB
TestThread01.java 676B
TestLock.java 1KB
TestPC.java 3KB
TestCallable01.java 2KB
TestThreadPool.java 852B
TestRunnable01.java 712B
StaticProxy.java 1KB
TestJUC.java 796B
UnsafeList.java 875B
共 55 条
- 1
资源评论
JasonHuan1123
- 粉丝: 954
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功