设置两个线程一个对i加1 另一个对i减2 并保证i在0到20之间 java实现

allenzhangchina 2015-12-12 09:50:06
设置两个线程一个对i加1 另一个对i减2 并保证i在0到20之间 java实现
...全文
329 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
allenzhangchina 2016-02-28
  • 打赏
  • 举报
回复
你这是神回复啊。 你写一个瞅瞅啊。
alan19931103 2015-12-15
  • 打赏
  • 举报
回复
这不就是生产者消费者,百度一大把
allenzhangchina 2015-12-12
  • 打赏
  • 举报
回复
package thread.t1; /** * 多线程--设计2个线程,其中1个线程每次对i增加1,另外两个线程对i每次减少2 并保证i的值在0 到 20 之间 wait nofiy */ //求代码优化 public class T5 { // 采用 Runnable 接口方式创建的多条线程可以共享实例属性 private int i = 0; // 标识i的值是否超过边界值 private boolean flag = true; // 同步增加方法 private synchronized void inc() throws InterruptedException { if (!flag) { wait(); } else { i++; System.out .println(Thread.currentThread().getName() + "--inc--" + i); if (i >= 20) { // 将表示i已经达到上限 设置表示为false flag = false; // 唤醒其他线程 notifyAll(); } } } // 同步减算方法 private synchronized void dec() throws InterruptedException { if (flag) { wait(); } else { i -= 2; System.out .println(Thread.currentThread().getName() + "--dec--" + i); if (i <= 0) { // 将表示i已经达到下限 设置表示为true flag = true; // 唤醒其他线程 notifyAll(); } } } // 增加线程 注意是内部类,且是非静态的 class Inc implements Runnable { public void run() { try { while(true){ inc(); } } catch (InterruptedException e) { e.printStackTrace(); } } } // 减算线程 注意是内部类,且是非静态的 class Dec extends Thread { public void run() { try { while(true){ dec(); } } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { // 由于内部类是非静态的,所以这样需要Test的实例化才能调用生成内部类实例 T5 t = new T5(); // 内部类的实例化 Inc inc = t.new Inc(); // Dec dec = t. new Dec(); Thread thread = null; thread = new Thread(inc); // 实现Runnable的类的实例化,使用带参数的Thread构造方法. thread.start(); thread = t.new Dec(); // 继承Thread的类可以直接实例化. thread.start(); } }

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧