java多线程----例子

题目:一共有100个馒头,40个工人,每个工人最多可以吃3个馒头,使用多线程输出所有工人吃馒头的情况。
程序很简单,设计如下:

public class MantouDemo {
    public static void main(String[] args){
        Basket basket=new Basket();
        for(int i=1;i<=40;i++){
        new Worker("worker-"+i,basket).start();
        }
    }

}
class Worker extends Thread{
    private String name;
    private Basket basket;
    private int MAX=3;    //定义工人所能吃馒头的最大数
    private int n;    //工人所取馒头数
    public Worker(String name,Basket basket){
        this.name=name;
        this.basket=basket;
    }
    public void run(){
        while(true){
        //判断是否吃饱了
            if(n>=MAX){
                return;
            }
            //如果没吃饱,继续取馒头
            int t=basket.getMantou();
            //如果发现已经没有馒头了,则直接返回
            if(t==0){
                return;
            }
            //如果还有,则可以继续取馒头,直到达到最大值3
            n++;
            System.out.println(name+":"+t);
        }

    }
}
class Basket{
    private int count=100;
    //同步方法,以当前篮子对象作为锁旗标
    public synchronized int  getMantou(){
        int temp=count;
        count--;
        return temp > 0 ? temp : 0;

    }

}

程序结果:
worker-1:100
worker-2:99
worker-1:98
worker-1:96
worker-2:97
worker-2:94
worker-3:95
worker-3:93
worker-3:92
worker-4:91
worker-4:90
worker-4:89
worker-5:88
worker-5:87
worker-5:86
worker-6:85
worker-6:84
worker-6:83
worker-7:82
worker-7:81
worker-7:80
worker-8:79
worker-8:78
worker-8:77
worker-9:76
worker-9:75
worker-9:74
worker-10:73
worker-10:72
worker-11:71
worker-10:70
worker-11:69
worker-12:68
worker-11:67
worker-12:66
worker-12:64
worker-13:65
worker-13:63
worker-14:62
worker-13:61
worker-14:60
worker-14:58
worker-15:59
worker-15:57
worker-15:55
worker-16:56
worker-16:54
worker-16:53
worker-17:52
worker-17:51
worker-17:50
worker-18:49
worker-18:48
worker-18:47
worker-19:46
worker-19:45
worker-19:44
worker-20:43
worker-20:42
worker-20:41
worker-21:40
worker-21:39
worker-21:38
worker-22:37
worker-22:36
worker-22:35
worker-23:34
worker-23:33
worker-23:32
worker-24:31
worker-24:30
worker-24:29
worker-25:28
worker-25:27
worker-25:26
worker-26:25
worker-26:24
worker-26:23
worker-27:22
worker-27:21
worker-27:20
worker-28:19
worker-28:18
worker-28:17
worker-29:16
worker-29:15
worker-29:14
worker-30:13
worker-30:12
worker-30:11
worker-31:10
worker-31:9
worker-31:8
worker-32:7
worker-33:6
worker-33:5
worker-33:3
worker-32:4
worker-32:1
worker-37:2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值