2.使用同步代码块解决线程安全问题

同步代码块中的锁可以是this关键字

创建线程类:

package com.thread.Safety;

public class TrainTicket implements Runnable {

    private int ticket = 100;
    private Object object = new Object();

    @Override
    public void run() {
        while (ticket > 0) {
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (object) {
                // 这里一定要加上if判断
                if (ticket>0){
                    System.out.println(Thread.currentThread().getName() + "--->" + (100 - ticket + 1));
                    ticket--;
                }

            }
        }
    }
}

测试类:

package com.thread.Safety;

public class TarinTicketDemo {
    public static void main(String[] args) {
        TrainTicket trainTicket = new TrainTicket();
        new Thread(trainTicket,"线程一").start();
        new Thread(trainTicket,"线程二").start();
    }
}

执行结果:

线程二--->1
线程一--->2
线程一--->3
线程二--->4
线程二--->5
线程一--->6
线程一--->7
线程二--->8
线程二--->9
线程一--->10
线程一--->11
线程二--->12
线程二--->13
线程一--->14
线程二--->15
线程一--->16
线程二--->17
线程一--->18
线程一--->19
线程二--->20
线程二--->21
线程一--->22
线程一--->23
线程二--->24
线程二--->25
线程一--->26
线程一--->27
线程二--->28
线程二--->29
线程一--->30
线程一--->31
线程二--->32
线程一--->33
线程二--->34
线程二--->35
线程一--->36
线程二--->37
线程一--->38
线程一--->39
线程二--->40
线程二--->41
线程一--->42
线程一--->43
线程二--->44
线程一--->45
线程二--->46
线程一--->47
线程二--->48
线程二--->49
线程一--->50
线程二--->51
线程一--->52
线程二--->53
线程一--->54
线程二--->55
线程一--->56
线程一--->57
线程二--->58
线程二--->59
线程一--->60
线程二--->61
线程一--->62
线程一--->63
线程二--->64
线程二--->65
线程一--->66
线程二--->67
线程一--->68
线程一--->69
线程二--->70
线程二--->71
线程一--->72
线程一--->73
线程二--->74
线程一--->75
线程二--->76
线程二--->77
线程一--->78
线程一--->79
线程二--->80
线程二--->81
线程一--->82
线程二--->83
线程一--->84
线程一--->85
线程二--->86
线程一--->87
线程二--->88
线程一--->89
线程二--->90
线程二--->91
线程一--->92
线程一--->93
线程二--->94
线程二--->95
线程一--->96
线程一--->97
线程二--->98
线程一--->99
线程二--->100
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。