多线程....

这篇博客展示了两个Java多线程编程的实例。第一个例子是两个线程轮流打印数字,直至达到100,通过`synchronized`关键字确保线程安全。第二个例子涉及三个线程同时卖票,使用相同的方法防止并发问题,直至票数售罄。这两个示例都强调了在多线程环境中如何正确地同步操作以避免数据竞争。

1. 两个线程轮流打印数字,一直到100

public class Demo1 extends  Thread {
    static Object o = new Object();
    static   int cout=100;
        @Override
    public void run() {

            while (true) {
                try {
                  
                    Thread.sleep(2000);
                    synchronized (o) {
                        if (cout > 0) {
                            System.out.println("cout = " + cout);
                            cout--;
                        } else {
                            System.exit(0);
                        }
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }

    }

    public static void main(String[] args) {
         Demo1 d = new Demo1();
         d.start();
        Demo1 d1 = new Demo1();
        d1.start();
    }
}

运行结果

2. 三个窗口同时卖票 用 实现Runnable方式

public class Demo2 implements Runnable{

    static int num= 30;//30张票
    static Object o=new Object();
    //实现接口Runnable重写run方法
    @Override
    public void run() {
        //循环卖票
        while (true){
            try {
                //休眠3秒执行一次 ==  3000毫秒
                Thread.sleep(3000);
                //多线程加同步锁  容易并发
                synchronized (o){
                    //当票数大于0执行卖票
                    if (num>0){
                        System.out.println("当前卖的票号为:"+num)
                        num--;
                    }else {
                        System.out.println("此票已售完");
                        System.exit(0);
                    }

                }

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

    public static void main(String[] args) {
        //new当前类  启动线程
        Demo2 d1 = new Demo2();
        Thread t1= new Thread(d1);
        t1.start();

        Demo2 d2 = new Demo2();
        Thread t2 = new Thread(d2);
        t2.start();

        Demo2 d3 = new Demo2();
        Thread t3 = new Thread(d3);
        t3.start();
    }

}
运行结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值