一、1
package test; /** * 消费者 */ public class Consumer extends Thread{ private int neednum; private Godown godown; Consumer(){ } Consumer(int neednum, Godown godown){ this.neednum = neednum; this.godown = godown; } public void run(){ //消费指定数量的产品 godown.consume(neednum); } }
2、
package test; /** * 仓库 */ public class Godown { public static final int max_size = 100; //最大库存量 public int curnum; //当前库存量 Godown(){ } Godown(int curnum){ this.curnum = curnum; } /** * 生产指定数量的产品 * @param neednum */ public synchronized void produce(int neednum) { //测试是否需要生产 while (neednum + curnum > max_size) { System.out.println("要生产的产品数量" + neednum + "超过剩余库存量" + (max_size - curnum) + ",暂时不能执行生产任务!"); try { //当前的生产线程等待 wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //满足生产条件,则进行生产,这里简单的更改当前库存量 curnum += neednum; System.out.println("已经生产了" + neednum + "个产品,现仓储量为" + curnum); //唤醒在此对象监视器上等待的所有线程 notifyAll(); } /** * 消费指定数量的产品 * @param neednum */ public synchronized void consume(int neednum) { //测试是否可消费 while (curnum < neednum) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //满足消费条件,则进行消费,这里简单的更改当前库存量 curnum -= neednum; System.out.println("已经消费了" + neednum + "个产品,现仓储量为" + curnum); //唤醒在此对象监视器上等待的所有线程 notifyAll(); } }
3、
package test; public class JoinTest{ public static void main(String[] args) { Thread t = new Thread(new RunnableImpl()); t.start(); try { t.join(1000); System.out.println("joinFinish"); } catch (InterruptedException e) { e.printStackTrace(); } } /** * Waits at most <code>millis</code> milliseconds for this thread to * die. A timeout of <code>0</code> means to wait forever. */ /*//此处A timeout of 0 means to wait forever 字面意思是永远等待,其实是等到t结束后。 public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); long now = 0; if (millis < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (millis == 0) { while (isAlive()) { wait(0); } } else { while (isAlive()) { long delay = millis - now; if (delay <= 0) { break; } wait(delay); now = System.currentTimeMillis() - base; } } }*/ }
4、
package test; public class JoinThread extends Thread { public static volatile int n = 0; public void run() { for (int i = 0; i < 10; i++, n++) try { sleep(3); // 为了使运行结果更随机,延迟3毫秒 } catch (Exception e) { } } public static void main(String[] args) throws Exception { Thread threads[] = new Thread[50]; for (int i = 0; i < threads.length; i++) // 建立100个线程 threads[i] = new JoinThread(); for (int i = 0; i < threads.length; i++) // 运行刚才建立的100个线程 threads[i].start(); if (args.length > 0) for (int i = 0; i < threads.length; i++) // 100个线程都执行完后继续 threads[i].join(); System.out.println("n=" + JoinThread.n); } }
5、
package test; /** * 生产者 */ public class Producer extends Thread{ private int neednum; //生产产品的数量 private Godown godown; //仓库 Producer(){ } Producer(int neednum,Godown godown){ this.neednum = neednum; this.godown = godown; } public void run() { //生产指定数量的产品 godown.produce(neednum); } }
6、
package test; class RunnableImpl implements Runnable { public void run() { try { System.out.println("Begin sleep"); Thread.sleep(2000); //原来为1000 System.out.println("End sleep"); } catch (InterruptedException e) { e.printStackTrace(); } } }
7、
package test; public class ThreadTest { public static void main(String[] args) { Godown godown = new Godown(30); Consumer c1 = new Consumer(50, godown); Consumer c2 = new Consumer(20, godown); Consumer c3 = new Consumer(30, godown); Producer p1 = new Producer(10, godown); Producer p2 = new Producer(10, godown); Producer p3 = new Producer(10, godown); Producer p4 = new Producer(10, godown); Producer p5 = new Producer(10, godown); Producer p6 = new Producer(10, godown); Producer p7 = new Producer(80, godown); Producer p8 = new Producer(10, godown); c1.start(); //wait c2.start(); c3.start(); //wait p1.start(); p2.start(); //p2执行完后,仓储量为30,唤醒等待线程时,c3在等待且消费数量满足要求,故又执行c3 //已经生产了10个产品,现仓储量为30 //已经消费了30个产品,现仓储量为0 p3.start(); p4.start(); p5.start(); p6.start(); p7.start(); //wait //要生产的产品数量80超过剩余库存量60,暂时不能执行生产任务! p8.start(); } }
相关推荐
测试类 如何使用socket进行实时通讯
测试类jar包
Java jdbc oracle 测试类
这只是一个redis的简单小测试类,大家有兴趣可以下,里面都是一些常见的用法
在本主题中,我们将深入探讨如何在Android中利用测试类来进行数据库的基本操作。测试类在软件开发中扮演着重要角色,它能确保数据库操作的正确性,并在出现问题时提供调试帮助。 首先,Android系统主要使用SQLite...
Jmeter中如何编写java测试类Jmeter中如何编写java测试类.rarJmeter中如何编写java测试类.rarJmeter中如何编写java测试类.rarJmeter中如何编写java测试类.rar
与Queue对应的测试类,应用的junit3标准。实现了队列那六项的测试。
Eclipse自动生成接口和JUnit测试类
为了编写测试类,我们需要遵循一些最佳实践。首先,测试应该独立于被测试代码,这意味着测试代码应避免直接依赖于被测试对象的实现细节。其次,每个测试方法应该只测试一个行为,这样可以更容易地定位失败的原因。...
一个关于junit的时候会用到的公共方法,如映射访问私有函数,给类属性设置值,httpunit设置访问web端测试
tomcat7源码调试,测试类中依赖的一个类,这里提供这个类的文件
FreeMarker测试类
方法的参数传递机制测试类,以供大家交流之用。
在IT行业中,多表位测试类通常用于数据库应用或者数据处理系统的测试,它涉及到了数据库设计、编程语言(如C#)以及开发环境(如Visual Studio 2008和2010)。这里我们将深入探讨这些关键概念,并提供相关的知识点。...
这篇博文“生成junit测试类”可能讲述了如何使用特定工具或方法来自动化创建JUnit测试类的过程。下面将详细讨论JUnit测试、EasyMock和PowerMock等相关知识点。 1. JUnit测试:JUnit是Java编程语言的一个开源测试...
声明测试类TestStudent完成对多态性的测试:(1)在主方法中声明Student类的数组(含五个元素)。(2)生成五个对象存入数组,其中三个Student类的对象、一个StudentXW类的对象、一个StudentBZ类的对象。(3)将方法...
信息同步测试类
Test1、Test2是测试类 使用maven管理,在pom.xml文件中引入如下代码: <!-- Rabbitmq工具包 --> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client <version>3.6.5 rabbitmq.properties配置...