码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA多线程 - 对象锁

时间:2020-03-14 00:46:34      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:col   catch   www   同步代码块   很多   string   cat   sync   class   

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

  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 }

 技术图片

JAVA多线程 - 对象锁

标签:col   catch   www   同步代码块   很多   string   cat   sync   class   

原文地址:https://www.cnblogs.com/beekc/p/12490029.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!