标签: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 }
标签:col catch www 同步代码块 很多 string cat sync class
原文地址:https://www.cnblogs.com/beekc/p/12490029.html