成都Java培训怎么样?成都Java开发面试题分享。
常用的同步方法是采用信号或加锁机制,确保资源在任意时刻至多被一个线程访问。Java语言在多线程编程上实现了完全对象化,提供了对同步机制的良好支持。
图片描述(*多50字)
在Java中一共有四种方法支持同步,其中前三个是同步方法,一个是管道方法。管道方法不建议使用,阻塞队列方法在问题4已有描述,现只提供前两种实现方法。
- wait()/notify()方法
- await()/signal()方法
- BlockingQueue阻塞队列方法
- PipedInputStream/PipedOutputStream
一、生产者类:
```
public class Producer extends Thread { // 每次生产的产品数量
private int num;
// 所在放置的仓库
private Storage storage;
// 构造函数,设置仓库
public Producer(Storage storage) {
this.storage = storage;
}
// 线程run函数
public void run() {
produce(num);
}
// 调用仓库Storage的生产函数
public void produce(int num) {
storage.produce(num);
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public Storage getStorage() {
return storage;
}
public void setStorage(Storage storage) {
this.storage = storage;
}
}
```
二、消费者类:
```
public class Consumer extends Thread { // 每次消费的产品数量
private int num;
// 所在放置的仓库
private Storage storage;
// 构造函数,设置仓库
public Consumer(Storage storage) {
this.storage = storage;
}
// 线程run函数
public void run() {
consume(num);
}
// 调用仓库Storage的生产函数
public void consume(int num) {
storage.consume(num);
}
// get/set方法
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public Storage getStorage() {
return storage;
}
public void setStorage(Storage storage) {
this.storage = storage;
}
}
```
仓库类:(wait()/notify()方法)
```
public class Storage { // 仓库**存储量
private final int MAX_SIZE = 100;
// 仓库存储的载体
private LinkedList list = new LinkedList();
// 生产num个产品
public void produce(int num) {
// 同步代码段
synchronized (list) {
// 如果仓库剩余容量不足
while (list.size() + num > MAX_SIZE) {
System.out.print( 【要生产的产品数量】: + num);
System.out.println( 【库存量】: + list.size() + 暂时不能执行生产任务! );
try {
list.wait();// 由于条件不满足,生产阻塞
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 生产条件满足情况下,生产num个产品
for (int i = 1; i <= num; ++i) {
list.add(new Object());
}
System.out.print( 【已经生产产品数】: + num);
System.out.println( 【现仓储量为】: + list.size());
list.notifyAll();
}
}
// 消费num个产品
public void consume(int num) {
// 同步代码段
synchronized (list) {
// 如果仓库存储量不足
while (list.size() < num) {
System.out.print( 【要消费的产品数量】: + num);
System.out.println( 【库存量】: + list.size() + 暂时不能执行生产任务! );
try {
// 由于条件不满足,消费阻塞
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 消费条件满足情况下,消费num个产品
for (int i = 1; i <= num; ++i) {
list.remove();
}
System.out.print( 【已经消费产品数】: + num);
System.out.println( 【现仓储)量为】: + list.size());
list.notifyAll();
}
}
// get/set方法
public LinkedList getList() {
return list;
}
public void setList(LinkedList list) {
this.list = list;
}
public int getMAX_SIZE() {
return MAX_SIZE;
}
}
```
仓库类:(await()/signal()方法)
```
public class Storage { // 仓库**存储量
// 仓库**存储量
private final int MAX_SIZE = 100;
// 仓库存储的载体
private LinkedList list = new LinkedList();
// 锁
private final Lock lock = new ReentrantLock();
// 仓库满的条件变量
private final Condition full = lock.newCondition();
// 仓库空的条件变量
private final Condition empty = lock.newCondition();
// 生产num个产品
public void produce(int num) {
// 获得锁
lock.lock();
// 如果仓库剩余容量不足
while (list.size() + num > MAX_SIZE) {
System.out.print( 【要生产的产品数量】: + num);
System.out.println( 【库存量】: + list.size() + 暂时不能执行生产任务! );
try {
// 由于条件不满足,生产阻塞
full.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 生产条件满足情况下,生产num个产品
for (int i = 1; i <= num; ++i) {
list.add(new Object());
}
System.out.print( 【已经生产产品数】: + num);
System.out.println( 【现仓储量为】: + list.size());
// 唤醒其他所有线程
full.signalAll();
empty.signalAll();
// 释放锁
lock.unlock();
}
// 消费num个产品
public void consume(int num) {
// 获得锁
lock.lock();
// 如果仓库存储量不足
while (list.size() < num) {
System.out.print( 【要消费的产品数量】: + num);
System.out.println( 【库存量】: + list.size() + 暂时不能执行生产任务! );
try {
// 由于条件不满足,消费阻塞
empty.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 消费条件满足情况下,消费num个产品
for (int i = 1; i <= num; ++i) {
list.remove();
}
System.out.print( 【已经消费产品数】: + num);
System.out.println( 【现仓储)量为】: + list.size());
// 唤醒其他所有线程
full.signalAll();
empty.signalAll();
// 释放锁
lock.unlock();
}
// set/get方法
public int getMAX_SIZE() {
return MAX_SIZE;
}
public LinkedList getList() {
return list;
}
public void setList(LinkedList list) {
this.list = list;
}
} |
http://cd.mobiletrain.org/
|
友情提示:
信息由用户自行发布,采用请谨慎,我们鼓励您当面交易。如有不符合法规或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们。名站在线只为传递信息,我们不做任何双方证明,也不承担任何法律责任。 信息转载,请标明来源于www.fwol.cn ,谢谢。 |
当前页在本站[名站在线]7天内点击次数(点击次数为零的日期不显示): |
信息评估: |
(还没有网友对该信息作出评估,你想为该信息提供第一个评估吗?) |
安徽纸箱订做价格合理安徽纸箱加工_天智纸箱厂安徽纸箱订做价格合理安徽纸箱加工_天智纸箱厂合肥天智包装材料有限公司13329012958专业制作生产各种规格纸箱,纸箱包装,彩印纸箱,包装纸盒,纸包装箱,瓦楞纸箱,重型包装纸箱等。致力于包装产业的变革,用国内专业的生产设备、国内专业的生产工艺、国内专业的理理念和良好的客户服务,全力打造中国包装行业的专业品牌。我们始终坚持“质量是企业的生命,效益是我们的追求”经营理念,秉持“高质低价、**准时、客户至上”的宗...质量好的台球桌在哪有卖甘肃台球桌质量好的台球桌在哪有卖甘肃台球桌 英超体育主营的台球桌品种规格齐全、价格合理、质量优良,产品的各项指标均达到符合国台球用品的质量标准,是以优质环保材料加工制成的,不论是从精心选材、生产、还是包装、物流等程序,无不倾注我们的全心力,深受广大需求对象的好评,可支持国内贸易交易。 质量可靠的品质造就诚信**的企业,公司销的台球桌主要用于健康娱乐,产品种类齐全,外观新颖,结构设计合理,可满足需求对象等...安装膜结构看台优选鸿鑫膜结构 膜结构体育场看台安装膜结构看台优选鸿鑫膜结构 膜结构体育场看台 青州鸿鑫膜结构工程有限公司建立于2017-10-30,发展至今,产品不断推陈出新,坚持技术创新,诚信经营,是一以销为主营方向的有限责任公司。公司注重膜结构看台产品开发,并符合国标准,产品畅销国内各地,在全国地区都有良好市场反响。鸿鑫膜结构愿与有志之士共同携手缔造传世品牌,诚邀加盟,联系人张经理,联系热线13455617770 鸿鑫膜结构 成立至今,全体员工一直秉承 “诚信...污水处理厂提标改造哪家专业嘉兴污水处理污水处理厂提标改造哪专业嘉兴污水处理 深圳市清泉水业股份有限公司创建于1995-02-27,是一专门从事污水处理设备的有限责任公司。公司业务覆盖广阔,经营规模不断扩大,承建项目广,始终秉承诚信为先,质量为本的企业宗旨,为广大的需求群体提供优质的污水处理厂提标改造,依照专业化、规范化、协同作战的原则,在全国留下了辉煌业绩。 经多年发展,清泉水业不断成长壮大并初具规模,若需要我公司的污水处理厂提标改造服务,...邢台新河回转式清污机推荐_新河回转式清污机邢台新河回转式清污机推荐_新河回转式清污机 启闭机械产品质量可靠,价格公道,每一个出库的回转式清污机都要经过严格质量检测,达到质量标准才可以出厂。高标准,精细化,零缺陷,是企业对职工的基本要求。当需求群体与我公司签订订单后,您需要注意我司指定的付款方式为在线支付;现金支付,临时有变动的情况下,我们会及时与您取得联系。 优质的服务是客户的需求,而满足客户的需求是我们不变的宗旨。启闭机械为了客户能够...
|
|
|
|
|