public class SynchronizedTest {
// 线程2需要等待线程1 doSome方法执行结束后再执行doOther吗?
public static void main(String[] args) {
myThread m = new myThread();
// 将m对象作为形参传进去,个人理解是将这个myThread这个类变成线程
// 两线程共用一个对象,会出现线程不安全的问题,这里使用synchronized关键字使线程变的安全
Thread thread = new Thread(m);
Thread thread1 = new Thread(m);
// 如果是同一个对象的话,synchronized修饰静态方法的话,锁的是类对象,上面的两个线程共用一个类对象,线程之间排队执行
thread.setName("线程1");
thread1.setName("线程2");
thread.start();
// 保证线程1先执行
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
thread1.start();
}
}
class myThread extends Thread{
@Override
public void run() {
if (Thread.currentThread().getName().equals(“线程1”))
doSome();
if (Thread.currentThread().getName().equals(“线程2”))
doOther();
}
public synchronized static void doSome(){
System.out.println(Thread.currentThread().getName() + " doSome begin");
try {
Thread.sleep(1000 * 10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " doSome end");
}
// synchronized修饰实例方法,虽然上面的synchronized修饰了静态方法,但是由于两个线程使用的同一个对象,线程2不需要等待线程1执行结束
public synchronized void doOther(){
System.out.println(Thread.currentThread().getName() + " doOther begin");
System.out.println(Thread.currentThread().getName() + " doOther end");
}
}