- 浏览: 139722 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
yaoweinan:
没有.....
Itext 5.4.0 生成PDF中文不报错,Adobe 不显示 -
马文涛:
我也发现这个问题了,你找到解决办法了吗?
Itext 5.4.0 生成PDF中文不报错,Adobe 不显示 -
coding1688:
博主辛苦了,也可以参考一下这篇文章:四步轻松搞定瀑布流布局ht ...
瀑布流布局个人实现 -
yaoweinan:
嘿嘿,那个只是最笨的办法,实际上是不行的,现在一般的都有sw ...
文件上传(无刷新,带进度条,带网速)下载完整 -
javazzu:
我为啥不行呢
文件上传(无刷新,带进度条,带网速)下载完整
模拟公司仓库、生产、销售的过程
package cn.thread;
/**
* 公司
* @author 姚伟楠
*
*/
public class Company {
/**
*
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Company com=new Company();
com.produte();
com.sale();
}
private Storage storage=new Storage();//公司仓库
private int producer_num=5;//公司生产线人数
private int saler_num=3;//公司销售人数
private int produce_internal=2*1000;//每间隔2秒一个人可以生产一个产品
/**
* 生产
*/
public void produte(){
// TODO 找一定数量人员开始生产产品
for(int i=0;i<producer_num;i++){
new Producer((long) i,"No."+i+"Pro") {
public void producte() {
synchronized(Producer.class){//防止编号大的产品比编号小的产品早放在仓库
while(true){
try {
Thread.currentThread().sleep(produce_internal);
} catch (InterruptedException e) {
e.printStackTrace();
}
Good good=new Good();
synchronized (storage) {
while (!(storage.getNumOfGood()<storage.getStorage_size())) {
//仓库已满,进入等待
try {
storage.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
storage.putGood(good);
System.out.println(this.getName()+"生产"+good.getXh()+"号产品,仓库剩余"+storage.getNumOfGood()+"物品");
storage.notify();
}
}
}
}
}.start();
}
}
public void sale(){
// TODO 找一定数量的人员来销售产品
for(int i=0;i<saler_num;i++){
new Saler((long) i,"No."+i+"Saler") {
public void sale() {
while(true){
try {
Thread.currentThread().sleep((long)(10000* Math.random()));
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (storage) {
while (storage.getNumOfGood()<1) {//仓库无货物,进入等待
try {
storage.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Good good=storage.getGood();
System.out.println(this.getName()+"销售"+good.getXh()+"号产品,仓库剩余"+storage.getNumOfGood()+"物品");
storage.notify();
}
}
}
}.start();
}
}
}
仓库类
package cn.thread;
import java.util.Stack;
/**
* 仓库类
*
* @author 姚伟楠
*
*/
public class Storage {
private final Stack<Good> store = new Stack<Good>();
private final int storage_size=100;
/**
* 放入货物
*
* @param good
*/
public void putGood(Good good) {
store.push(good);
}
/**
* 拿出货品
*
* @return
*/
public Good getGood() {
Good good=store.pop();
return good;
}
/**
* 获得仓库中货品数量
* @return
*/
public int getNumOfGood(){
return store.size();
}
/**
* 获得仓库大小
* @return
*/
public int getStorage_size() {
return storage_size;
}
}
生产者类
package cn.thread;
/**
* 生产者,生产者生产对象不明确,定义为抽象类,具有抽象的生产方法
*
* @author 姚伟楠
*
*/
public abstract class Producer implements Runnable {
private Long id;// 生产者编号
private String name;// 生产者名称
private Thread thread=new Thread(this);//单独生产
public Producer(Long id, String name) {
super();
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 生产物品
*/
public abstract void producte();
@Override
public void run() {
producte();
}
/**
* 开始生产
*/
public void start(){
thread.start();
}
/**
* 停止生产
*/
public void stop(){
thread.stop();
}
}
销售者类
package cn.thread;
/**
* 销售员,由于未知此售货员销售的是哪个仓库的货物,所以此处销售对象不明确,定义为抽象方法
* @author 姚伟楠
*
*/
public abstract class Saler implements Runnable{
private Long id; //售货员编号
private String name;//名称
private Thread thread=new Thread(this);//单独销售
/**
* 销售物品
*/
public abstract void sale();
public Saler(Long id, String name) {
super();
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void run() {
sale();
}
/**
* 开始销售
*/
public void start(){
thread.start();
}
/**
* 停止销售
*/
public void stop(){
thread.stop();
}
}
物品类
package cn.thread;
/**
* 物品类
* @author 姚伟楠
*
*/
public class Good {
public static Long xh_icreate=0L;
private String xh;//物品流水号
public Good() {
xh=this.format(++xh_icreate);
}
/**
* 格式化产品编号为16位数字
* @param long1
* @return
*/
private String format(Long long1) {
String tmp=long1+"";
int length=tmp.length();
while(18-length>0){
tmp="0"+tmp;
length=tmp.length();
}
return tmp;
}
public String getXh() {
return xh;
}
}
发表评论
文章已被作者锁定,不允许评论。
-
写自己的框架,让别人笑掉大牙吧(IOC2)
2013-04-22 14:23 907上篇中主要使用配置文件来定义一些类实例之间的组织关系 ... -
关于java中对象属性值的校验的思考
2013-04-15 14:09 1563现在在java 开发中经常会遇到要交验某个obje ... -
java 动态编译及执行实现Web式java开发
2012-11-29 17:05 944废话不说,让大家等了这么久,先看看截图 : 编译 ... -
JXLayer 使用简单介绍
2012-11-01 17:25 1346JXLayer 是一个很好的Swing 控件装饰类库,其主要要 ... -
关于Jtextinpt 内容的限制
2012-09-28 15:00 817在JTextInput 限制输入内容,这个一般的通过按键输入进 ... -
构造中的多态
2012-08-25 23:19 860各位仁兄,前几日我在 ... -
Swing JtableModel 使用之旅
2012-07-29 03:25 1041JTable 是我们一般展示数据的一个很好的Grid组建,个人 ... -
模版模式(TemplatePattern)
2012-07-15 11:08 802模版模式分为2个部分 1.抽象模版 2.具体模版 ... -
门面模式(Facade Pattern)
2012-06-10 19:37 1006门面模式(Facade Pattern):门面模式在我个人感觉 ... -
代理模式例子
2012-06-04 15:07 995代理模式简单点就和现实中一样,只是代理实质性的还是别人在做。比 ... -
策略模式应对旅行中出现的问题
2012-06-04 14:21 913策略模式是针对在进行过程中出现一些问题的应对模式。一般可以分为 ... -
java 工厂模式简单介绍及例子
2012-06-03 23:16 1080java中工厂模式在java ee中经常碰见,是一种常见的模式 ... -
java 动态代理及自定义标注使用例子
2012-06-03 00:14 1264java中动态代理,在实际应用中有着很大的作用,譬如在一些类似 ... -
flex3 socket+java
2012-02-06 12:10 1112首先解决的问题是flex的沙箱问题,由于flex 连接服务器存 ... -
java 自定义注解
2012-01-30 16:09 842写道 package com.my;import j ... -
图片裁剪,缩放 批处理
2012-01-07 15:25 1055package dwr.demo; import ... -
java System.Properties
2011-10-26 13:19 755使用Properties.getProperty方法的参数也可 ... -
JDK自带的实用工具native2ascii.exe
2011-10-26 09:21 859在做Java开发的时候, ... -
dom4j xml 简单操作
2011-10-24 11:02 743package com.my.until; import j ... -
装饰模式例子(模仿修改船只用途)
2011-08-28 20:31 730模仿一次出海旅行中船只的用途的动态调整 功能 写道 pac ...
相关推荐
这样,通过队列的阻塞特性,可以自然地实现生产者-消费者模式,使得生产与销售在多线程环境下协同工作,而无需显式地进行线程同步。 同时,为了保证系统的高效率,我们需要合理地调度线程。例如,可以设置生产线程...
在给定的描述中,“模拟生产、入库、销售多线程实现”是一个实际的应用示例,这通常指的是在业务系统中,通过创建不同的线程来模拟真实的生产、库存管理和销售流程。每个线程可能负责一个特定的任务,如一个线程处理...
- **Producer类**:代表生产者,实现`Runnable`接口,创建一个生产者线程,持续调用`Clerk`对象的`addProduct()`方法,模拟生产产品。 - **Consumer类**:代表消费者,同样实现`Runnable`接口,创建一个消费者线程...
这是一个经典的多线程同步问题,生产者负责生产面包,消费者负责消费。生产者和消费者必须协调工作,当仓库为空时,生产者需要等待;当仓库满时,消费者需要等待。在Java中,我们可以使用`wait()`和`notify()`方法...
- **应用场景**:进程的概念对于软件开发人员非常重要,尤其是在编写多线程应用时,理解进程间通信和同步机制可以帮助他们设计出更加高效、可靠的程序。 **3. “黄金水道”——长江** - **知识点**:地理知识 - **...
### 使用wait和notifyAll方法详解 ...在生产者消费者模型等多线程应用场景中,它们能够有效地控制线程之间的交互,确保程序的正确性和效率。此外,合理的同步机制设计对于提高系统的并发性能至关重要。
6. 多线程:在大型库存系统中,可能需要同时处理多个入库或出库操作,C#的多线程技术可以提高并发处理能力,提升系统性能。 库存管理的关键功能模块: 1. 入库管理:记录新到货物品的信息,包括供应商、数量、日期...
在Java并发编程中,尤其是在处理多线程同步时,一个重要的概念是“虚假唤醒”(Spurious Wakeup)。这是一种较为罕见的现象,但在实际开发过程中仍然值得高度关注。虚假唤醒指的是,在没有其他线程调用`notify()`...
- **多线程处理**:在处理大量数据时,采用多线程技术提高系统响应速度。 - **安全性保障**:实现用户权限管理和数据加密传输,保护敏感信息。 - **异常处理**:通过完善的异常捕获和日志记录机制,确保系统的...
- **多线程**:如果系统需要并行处理多个任务,如同时处理多个用户的请求,Java的多线程技术将派上用场。 4. **设计模式的应用** - **工厂模式**:用于创建对象,提供统一的接口,避免直接实例化具体类。 - **...
电子行业周报内容还涉及多份行业研究报告,包括液晶面板供需平衡、内存库存状况、IC设计企业税务优惠、SID2019会议报道、集成电路税收优惠延续以及模拟IC厂商排名等内容。这些报告为读者提供了电子行业的多方面分析...
2. 无缝开发多线程应用。 3. 精确同步多核启动和停止,便于定位程序问题。 4. 利用系统模式(System Mode)调试功能,实时监控多核运行的软件交互。 5. 通过JTAG加速器技术提高多核调试时的JTAG带宽,加快开发和分析...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...
6. **软件即服务(SaaS)**:GE提倡构建软件服务能力,包括产品管理、工程设计、销售和营销等多个环节,强调服务的订阅和交付模式,以满足客户不断变化的需求。 7. **数据和连接的基础设施**:数据被视为新的生产要素...
这可能涉及缓存策略、批处理更新、并行计算等技术,例如使用Redis进行缓存,或者利用多线程和分布式计算提升计算速度。 8. **测试与评估**: 系统应包含单元测试和集成测试,确保各个组件的正确性。推荐效果的评估...
双核是利用超线程技术实现的**:超线程技术与双核技术不同,它是在一个物理核心上通过硬件模拟出多个逻辑核心的技术,而双核则是指真正的物理核心数量。 - **C.双核就是指CPU 上集成两个运算核心**:这是对双核技术...
HP在生产过程中对PC进行了严格的检验和多年实际负载模拟测试,以确保在整机的生命周期内性能稳定并保持较低的维护成本。此外,该机型还兼容数百个经过认证的现有组件,使其能够在现有网络环境中无缝集成。 惠普为D...
6. **多线程**:为了实现并行处理,如同时处理多个顾客请求,应用可能会使用多线程技术。 7. **文件I/O**:保存和加载游戏进度可能涉及到读写文件,如XML、JSON或自定义格式。 8. **异常处理**:为了确保程序的...