实现多线程: 1. extends Thread 2. implement Runnable interface 线程应该用start 方法来启动。直接运行Run 方法并没有启动多线程,还是在主线程中执行run方法,跟普通方法调用一样。 3. 一般倾向于用new Thread(Runnable)这种方式而不是继承Thread,理由有二: 1. 用Runnable接口可以留下多继承的余地 2. 不会因为Thread类继承下来的锁或者方法相互干扰 sleep() join(),相当与thread实例.wait,会释放thread实例对应的锁。对于锁应该声明一个私有的对象锁,这样不会暴露到外面去引起误用。 private final Object lock = new Object(); 误用的例子如下: 比如创建一个新的Thread实例,系统都会获取Thread类上的锁。以下代码会阻止新线程的创建。 synchronized(Thread.class){ Thread.sleep(Long.MAX_VALUE); } 4. Synchronized 方法的锁是针对不同线程的,不同线程只能顺序执行该同步方法。但是同一个线程可以重复地获得某个相同的锁。也即可以调用别的Synchronized 方法,只要用的是同一把锁。