当前位置: 首页 > 后端技术 > Java

java编程开发多线程锁的8个问题分析

时间:2023-04-01 14:27:03 Java

java编程和开发多线程锁的8个问题解析"------sendSMS");}publicsynchronizedvoidsendEmail()throwsException{System.out.println("------sendEmail");}publicvoidgetHello(){System.out.println("-----getHello");}}/**@描述:8把锁@authorxialei*标准访问,先打印短信或邮件,停止for4secondsSMS方式中,先打印SMS或者email,添加normalhello方式,是先发短信还是hello现在有两个手机,先打印短信或者email两种静态同步方式,1个手机,打印短信优先或邮件两种静态同步方式2手机打印短信优先orMail1静态同步方式1普通同步方式1手机打印短信或邮件优先1静态同步方式1普通同步方式2手机,先打印短信或邮件**/publicclassLock_8{publicstaticvoidmain(String[]args)throwsException{Phonephone=newPhone();Phonephone2=newPhone();newThread(()->{尝试{电话。sendSMS();}catch(Exceptione){e.printStackTrace();}},"AA").start();Thread.sleep(100);newThread(()->{try{phone.sendEmail();//phone.getHello();//phone2.sendEmail();}catch(Exceptione){e.printStackTrace();}},"BB").start();}}锁定8题(1)标准接入,先打印短信或邮件(2)短信方式停4秒,先打印短信或邮件(3)常见的hello方法,先发短信还是先hello(4)现在有两部手机,先打印短信或者邮件(5)两种静态同步方式,1部手机,先打印短信或者邮件(6)两个1静态同步方式,2手机,先打印短信或邮件(7)1静态同步方式,1普通同步方式,1手机,先打印短信或邮件(8)1静态同步方式,1普通同步方式,2手机手机,先打印短信还是先锁定邮件8个问题。分析如果一个对象中有多个synchronized方法,在某一时刻,只要有一个线程调用其中一个synchronized方法,其他线程就只能等待,换句话说,在某一时刻,只有一个线程可以访问这些synchronized方法锁定当前对象this。被锁定后,其他线程无法进入当前对象的其他synchronized方法。添加了一个常用的方法后,发现跟同步锁没有关系。换成两个对象后,就不是同一个锁了,情况马上就变了。synchronized实现同步的基础:Java中的每一个对象都可以作为锁。具体表现为以下三种形式。对于普通的同步方法,锁是当前实例对象。对于静态同步方法,锁是当前类的Class对象。对于一个synchronized方法块,锁就是Synchonized括号中配置的对象。当一个线程试图访问同步代码块时,它必须首先获得锁,并且在它退出或抛出异常时必须释放锁。也就是说,如果一个实例对象的非静态同步方法获取了锁,则该实例对象的其他非静态同步方法必须等待获取锁的方法释放锁后才能获取锁。实例对象的非静态同步方法使用不同的锁,因此它们可以获取自己的锁,而不用等待实例对象的已经获取锁的非静态同步方法释放锁。所有静态同步方法也使用相同的锁——类对象本身。这两个锁是两个不同的对象,所以静态同步方法和非静态同步方法之间不会出现竞争条件。但是一旦一个静态同步方法获取了锁,其他静态同步方法必须等待该方法释放锁后才能获取锁,无论是在同一个实例对象的静态同步方法之间,还是不同实例对象的静态同步方法之间之间,只要是同一个类的实例对象即可!关键词:java培训