• synchronized(){}同步代码块笔记(新手笔记,欢迎纠正)


     1 /*  内容:同步代码块,目的是解决多线程中的安全问题。什么安全问题呢??就是在执行run方法时,假如线程-0刚刚获得执行权,
     2  *还没执行时,就挂那了,这时线程-1获得执行权,并进行执行,就有可能出现负数票的情况。
     3  *原因:当一个线程执行run方法时,线程1操作共享数据时,失去了cpu执行权,导致线程2执行run方法,从而导致共享数据错误。
     4  *  解决办法:给多线程所要执行的代码加上锁。当一个线程执行run方法时,锁上锁,即使失去CPU执行权,
     5  *从而使其他线程不能执行run方法;
     6  *  synchronized(对象_){同步代码}:同步代码块,其中包含多线程共同执行的代码,此代码被同步.
     7  *  其中的对象就像一个锁.即使执行同步代码的线程失去CPU执行权,其他线程也会被锁在外面不能执行同步代码
     8  *  疑惑:obj对象??/毕老师当时没讲,只说了可以是任意对象,他直接调用的object上帝类建立了对象;
     9  * 例子:火车中的厕所
    10  * 同步前提:1,必须有两个或者两个以上的线程
    11  *      2,这些线程必须是使用的同一个锁.(原因举例:3,4节车厢的厕所,不是同一个锁,线程1,线程2可以同时进入3,4节车厢的厕所,不能达到同步的目的.
    12  *好出:解决了多线程的安全问题
    13  *弊端:每次都得判断锁,浪费了资源.
    14  */
    15 package ThreadDemoOne;
    16 class TicketDemo implements Runnable
    17 {
    18  int ticket=1000;
    19  Object obj =new Object();
    20  public void run()
    21  {
    22   while(true)
    23   {
    24    synchronized(obj)//obj就是一个锁,这里的synchronized就是同步代码块.括起来的就是线程需要一次性执行完的代码.
    25    {
    26    
    27     if(ticket>0)
    28      {
    29      System.out.println(Thread.currentThread()+"号售票员"+"这是第"+this .ticket+"张票");
    30     ticket--;
    31      } 
    32    } 
    33     
    34   }
    35  }
    36 }
    37 public class ThreadDemo6 
    38 {
    39  public static void main(String[] args )
    40  {
    41   TicketDemo t=new TicketDemo();
    42   Thread t1=new Thread(t);
    43   Thread t2=new Thread(t);
    44   t1.start();
    45   t2.start();
    46  
    47  }
    48  
    49  
    50  
    51 }
    52 /*运行结果摘取:
    53   
    54   Thread[Thread-1,5,main]号售票员这是第156张票
    55 Thread[Thread-1,5,main]号售票员这是第155张票
    56 Thread[Thread-1,5,main]号售票员这是第154张票
    57 Thread[Thread-0,5,main]号售票员这是第153张票
    58 Thread[Thread-0,5,main]号售票员这是第152张票
    59 
    60 */
    61 
    62  
    View Code
  • 相关阅读:
    机器学习--强化学习
    机器学习--深度学习
    机器学习--维度灾难
    机器学习--最优化
    机器学习--降维
    机器学习--聚类
    机器学习--模型提升
    Git和gitHub用户名 邮箱
    Git线上操作
    版本控制器:Git
  • 原文地址:https://www.cnblogs.com/ruoniao/p/5418589.html
Copyright © 2020-2023  润新知