package extthread;
import myservice.MyService;
public class ThreadA extends Thread {
private MyService service;
public ThreadA(MyService service) {
super();
this.service = service;
}
@Override
public void run() {
service.testMethod();
}
}
package extthread;
import myservice.MyService;
public class ThreadB extends Thread {
private MyService service;
public ThreadB(MyService service) {
super();
this.service = service;
}
@Override
public void run() {
service.testMethod();
}
}
package myservice;
public class MyService {
private String lock = "123";
public void testMethod() {
try {
synchronized (lock) {
System.out.println(Thread.currentThread().getName() + " begin "
+ System.currentTimeMillis());
lock = "456";
Thread.sleep(2000);
System.out.println(Thread.currentThread().getName() + " end "
+ System.currentTimeMillis());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
package test.run;
import myservice.MyService;
import extthread.ThreadA;
import extthread.ThreadB;
public class Run1 {
public static void main(String[] args) throws InterruptedException {
MyService service = new MyService();
ThreadA a = new ThreadA(service);
a.setName("A");
ThreadB b = new ThreadB(service);
b.setName("B");
a.start();
//Thread.sleep(50);// 存在50毫秒
b.start();
}
}
结果为(同步效果)
A begin 1533742467664
A end 1533742469664
B begin 1533742469664
B end 1533742471664
把注释去掉
A begin 1533742520047
B begin 1533742520097
A end 1533742522047
B end 1533742522097