视频来源

Synchronize 到底锁的是谁

实现线程同步,让多个线程依次获取某个资源,保证数据不会出错.

Synchronized 到底锁定的是什么元素

1:修饰方法:
        静态方法:锁定的是类
        非静态方法:锁定的是方法的调用者
2:修饰代码块
        锁定的是传入的对象

public class Data2
{
    //Synchronized 锁定代码块,使线程同步化
    //如果当前的实例化要运行fun方法,那么加了这个synchronized就会
    //把Data2这个对象"占住"(类似上厕所),其他再进来的线程就要等待前一个线程释放资源
    //这样就以达到线程同步化的效果
     Synchronized(this) //特别指明,这个this 指的是Data2的实例化对象
     {
           public void fun()
           {
              console.writeline("Start....");
              Thread.sleep(2000);//沉睡2s
              console.writeline("Ending....");
           }
   }
}

new 对象会开辟新的空间,放置在堆里。
不是new ,但是小于255 java 中的int常量池中有,所以是同一个
常量池有个范围是-128~127
如果超过这个值,依旧是会创建一个新的值
num=1,是在这范围里,直接从常量池中取,
如果num=255,那么就会New一个新的出来
for(int i=0;i<5;i++)
{
    new Thread(()=>
    {
      int num=1;//这里循环5次是同一个num
      //int num=new int(5);//这里是每次都新创建一个num,是5个num
    }
    )
}

 

相关文章:

  • 2021-10-03
  • 2021-06-17
  • 2021-07-13
  • 2022-12-23
  • 2022-12-23
  • 2021-09-17
猜你喜欢
  • 2019-06-14
  • 2022-12-23
  • 2022-01-05
  • 2021-07-31
  • 2022-12-23
  • 2022-12-23
  • 2020-12-27
相关资源
相似解决方案