情况3---加一个普通方法,此时不加时间延时
package com.nanjing.juc;
class Phone12 {
public synchronized void sendSMS() throws Exception {
//TimeUnit.SECONDS.sleep(4);//或者Thread.sleep(4000);
System.out.println(Thread.currentThread().getName()+"---发短信---sendSMS");
}
//这里没有锁,不是同步方法,不受锁的影响
public void getHello(){
System.out.println(Thread.currentThread().getName()+"------getHello");
}
}
public class ThreadDemo_12 {
public static void main(String[] args) throws Exception {
Phone12 phone12 = new Phone12();
new Thread(() -> {
try {
phone12.sendSMS();
} catch (Exception e) {
e.printStackTrace();
}
}, "AA").start();
Thread.sleep(100);
new Thread(() -> {
try {
phone12.getHello();
} catch (Exception e) {
e.printStackTrace();
}
}, "BB").start();
}
}
因为AA线程先执行sendSMS方法,先调用先执行!
所以先打印了AA---发短信---sendSMS
后执行getHello方法,打印BB------getHello
package com.nanjing.juc;
import java.util.concurrent.TimeUnit;
class Phone12 {
public synchronized void sendSMS() throws Exception {
TimeUnit.SECONDS.sleep(4);//或者Thread.sleep(4000);
System.out.println(Thread.currentThread().getName()+"---发短信---sendSMS");
}
//这里没有锁,不是同步方法,不受锁的影响
public void getHello(){
System.out.println(Thread.currentThread().getName()+"------getHello");
}
}
public class ThreadDemo_12 {
public static void main(String[] args) throws Exception {
Phone12 phone12 = new Phone12();
new Thread(() -> {
try {
phone12.sendSMS();
} catch (Exception e) {
e.printStackTrace();
}
}, "AA").start();
Thread.sleep(100);
new Thread(() -> {
try {
phone12.getHello();
} catch (Exception e) {
e.printStackTrace();
}
}, "BB").start();
}
}
如果加了延时4S,则AA线程在原地等待4秒后再打印,BB线程比AA线程
快,早就打印出了BB------getHello
总结:
getHello是一个普通方法,不受 synchronized锁的影响,不用等待锁释放。