多线程并发,给我们编程带来很多好处,完成更多更有效率的程序。但是也给我们带来线程安全问题。比如多个线程同时操作一个对象时,第一个线程没处理好,第二个线程就进来插一脚,影响了程序执行。为了每个线程被安全执行,需要引入一个对象锁的概念,也就是线程同步方法。

  synchronized(Objecrt){你要同步的代码}

 

实例

模拟一个机票系统:有三个售票点,一天共同卖出2000张票。

 1 /*
 2  * 作者:白客C
 3  * 时间:2020年03月13日
 4  * 内容:线程锁实例
 5  */
 6 
 7 package com.beekc.www;
 8 
 9 public class Beekc{
10 
11     public static void main(String[] args)
12     {
13         //定义三个售票窗口
14         TicketWindow ticketWindow1 = new TicketWindow();
15         //TicketWindow ticketWindow2 = new TicketWindow();
16         //TicketWindow ticketWindow3 = new TicketWindow();
17 
18         //启动线程
19         Thread t1 = new Thread(ticketWindow1);
20         Thread t2 = new Thread(ticketWindow1);
21         Thread t3 = new Thread(ticketWindow1);
22         t1.start();
23         t2.start();
24         t3.start();
25         
26     }
27 
28 }
29 
30 //售票窗口类
31 class TicketWindow implements Runnable {
32 
33     //一共2000张票
34     private int nums = 2000;
35 
36     //覆盖run
37     public void run() {
38         while (true) {
39             //休眠
40             //try {
41             //    Thread.sleep(1000);
42             //} catch (Exception e) {
43             //    e.printStackTrace();
44             // }
45 
46             //要保证其原子性[同步代码块],传一个this对象,这里可以是任意对象
47             synchronized (this)
48             {
49 
50                 //判断是否有票
51                 if (nums > 0) {
52                     //显示售票信息
53                     //Thread.currentThread().getName()获取线程名字
54                     System.out.println(Thread.currentThread().getName() + " 在售出第" + nums + "票");
55                     
56                     //出票速度一秒一张
57                     try {
58                         Thread.sleep(1000);
59                     } catch (Exception e) {
60                         e.printStackTrace();
61                     }
62                     nums--;
63                 } else {
64                     //售票结束
65                     break;
66                 }
67             }
68 
69         }
70     }
71 }

 

posted on 2020-03-13 23:54  白客C  阅读(684)  评论(0编辑  收藏  举报