zoukankan      html  css  js  c++  java
  • 线程安全加锁的代码块的实现

     1:synchronized(同步的) 锁住代码块. 同步代码块

    1 synchronized(对象){ // 对象锁.  一定要注意,这个对象是同一个对象.!!!!!!  "abc"
    2     //代码块
    3 }
    4 
    5 同一个时间片,只有一个线程来访问这个代码块.

    2: synchronized 锁住方法,方法锁

    1 public  synchronized void meth(){  //同步方法.
    2     
    3 }
    4 
    5 多个线程来访问这个方法的时候, 同一个时间片,只有一个线程来访问这个方法

    案例:一个车站有5个售票窗口,5号窗口正在售第1000张票,4号窗口正在售第999张票,3号窗口正在售第998张票……

     1 package com.lv.study.pm.first;
     2 
     3 //解决超卖
     4 //解决负数
     5 public class TicketDemoSy5 {
     6 
     7     public static void main(String[] args) {
     8 
     9         // 窗口
    10         SellTicketThread4 s1 = new SellTicketThread4("窗口1");
    11         SellTicketThread4 s2 = new SellTicketThread4("窗口2");
    12         SellTicketThread4 s3 = new SellTicketThread4("窗口3");
    13         SellTicketThread4 s4 = new SellTicketThread4("窗口4");
    14         SellTicketThread4 s5 = new SellTicketThread4("窗口5");
    15 
    16         s1.start();
    17         s2.start();
    18         s3.start();
    19         s4.start();
    20         s5.start();
    21 
    22     }
    23 
    24 }
    25 
    26 class SellTicketThread4 extends Thread {
    27 
    28     // 全局唯一
    29     private static int ticketNumber = 1000;
    30 
    31     private String name;
    32 
    33     public SellTicketThread4(String name) {
    34         super();
    35         this.setName(name);
    36     }
    37 
    38     public SellTicketThread4() {
    39 
    40     }
    41 
    42     // 执行要卖票的业务
    43     public void run() {
    44 
    45         while (ticketNumber > 0) {
    46             
    47             //指定一个锁存储的对象 不是指定要锁的元素
    48             synchronized ("n") {
    49                 
    50                 //必须要判断一次来解决还有其他线程等着拿锁的情况
    51                 //就算拿到了锁  符合不了要求也进不来
    52                 if(ticketNumber>0){
    53                     
    54                     //同步代码块:同一个时间只有拿到锁线程能够访问
    55                     System.out.println(this.getName() + "开始卖第" + ticketNumber+"张票");
    56                     ticketNumber--;
    57                     
    58                 }
    59 
    60             }
    61 
    62         }
    63     }
    64 
    65 }

  • 相关阅读:
    高性能 HTML5 地铁样式的应用程序中的内容
    微软披露更多ARM Win8细节
    下一代互联网搜索的前沿:意图、知识与云
    使用 Sphinx 更好地进行 MySQL 搜索使用 Sphinx 进行非全文本搜索
    如何加快数模计算以及如何解决数模计算的收敛性问题
    Google App Engine正式支持Python 2.7
    ASP.NET MVC模型绑定
    给 MySQL 增加 Sequence 管理功能
    使用 Rational Build Forge 自动化 IBM Cloud 上的构建和发布过程
    Windows Phone 8基于WinRT?
  • 原文地址:https://www.cnblogs.com/dabu/p/12482875.html
Copyright © 2011-2022 走看看