其他分享
首页 > 其他分享> > 同步状态

同步状态

作者:互联网

线程同步

初识高并发

并发:同一个对象被多个线程同时操作

当多个线程同时操作同一个对象时,

火车票的案例:

public class TestThread4 implements Runnable{
    //票数
    private int ticketNums=100;
    @Override
    public void run() {
        while (true){
            if (ticketNums <=0) {
                break;
            }
//            模拟延时
//            try {
//                Thread.sleep(100);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
            System.out.println(Thread.currentThread().getName()+"-->拿到了第"+ticketNums--+"票");
        }
    }

    public static void main(String[] args) {
        TestThread4 ticket=new TestThread4();
        new Thread(ticket,"小明").start();
        new Thread(ticket,"小红").start();
        new Thread(ticket,"黄牛党").start();
    }
}

发现问题:多个线程操作同一份资源的情况下,线程不安全,数据紊乱。

龟兔赛跑案例

public class Race implements Runnable{

    //胜利者
    private static String winner;

    @Override
    public void run() {
        for (int i = 0; i <= 100; i++) {
           //模拟兔子休息
//            if (Thread.currentThread().getName()=="兔子"&& i%10==0) {
//                try {
//                    Thread.sleep(5);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
            //判断比赛是是否结束
            boolean flag=gameOver(i);
            if (flag) {
                break;
            }
            System.out.println(Thread.currentThread().getName()+"跑了"+i+"步");
        }
    }
    //判断是否完成比赛
    private boolean gameOver(int steps){
        //判断是否有胜利者
        if(winner!=null){//已经存在胜利者了
            return true;
        }{
            if (steps>=100) {
                winner=Thread.currentThread().getName();
                System.out.println("Winner is "+winner);
                return true;
            }
        }
        return false;
    }
    public static void main(String[] args) {
        Race race=new Race();
        new Thread(race,"兔子").start();
        new Thread(race,"乌龟").start();
    }
}

线程同步

线程同步形成条件:队列+锁

标签:状态,同步,synchronized,访问,线程,new,监视器
来源: https://www.cnblogs.com/iamning/p/16136131.html