package com.chapter02.thread2_2_9_1;publicclassService{/* synchronized public static void printA() {
try {
System.out.println("THREAD NAME = " + Thread.currentThread().getName() + ", AT " + System.currentTimeMillis() + " ENTER printA");
Thread.sleep(3000);
System.out.println("THREAD NAME = " + Thread.currentThread().getName() + ", AT " + System.currentTimeMillis() + " OUT printA");
} catch (Exception ex) {
ex.printStackTrace();
}
}
synchronized public static void printB() {
System.out.println("THREAD NAME = " + Thread.currentThread().getName() + ", AT " + System.currentTimeMillis() + " ENTER printB");
System.out.println("THREAD NAME = " + Thread.currentThread().getName() + ", AT " + System.currentTimeMillis() + " OUT printB");
}*/publicstaticvoidprintA(){synchronized(Service.class){try{
System.out.println("THREAD NAME = "+ Thread.currentThread().getName()+", AT "+ System.currentTimeMillis()+" ENTER printA");
Thread.sleep(3000);
System.out.println("THREAD NAME = "+ Thread.currentThread().getName()+", AT "+ System.currentTimeMillis()+" OUT printA");}catch(Exception ex){
ex.printStackTrace();}}}publicstaticvoidprintB(){synchronized(Service.class){
System.out.println("THREAD NAME = "+ Thread.currentThread().getName()+", AT "+ System.currentTimeMillis()+" ENTER printB");
System.out.println("THREAD NAME = "+ Thread.currentThread().getName()+", AT "+ System.currentTimeMillis()+" OUT printB");}}}
自定义线程1
package com.chapter02.thread2_2_9_1;publicclassThreadAextendsThread{private Service service;publicThreadA(Service service){this.service = service;}@Overridepublicvoidrun(){super.run();
service.printA();}}
自定义线程2
package com.chapter02.thread2_2_9_1;publicclassThreadBextendsThread{private Service service;publicThreadB(Service service){this.service = service;}@Overridepublicvoidrun(){super.run();
service.printB();}}
启动类
package com.chapter02.thread2_2_9_1;publicclassRun{publicstaticvoidmain(String[] args){
Service service1 =newService();
Service service2 =newService();
ThreadA threadA =newThreadA(service1);
threadA.setName("A");
threadA.start();
ThreadB threadB =newThreadB(service2);
threadB.setName("B");
threadB.start();}}
执行结果
THREAD NAME = A, AT 1541658444300 ENTER printA
THREAD NAME = A, AT 1541658447301 OUT printA
THREAD NAME = B, AT 1541658447302 ENTER printB
THREAD NAME = B, AT 1541658447302 OUT printB