实现多线程方式: 继承Thread 实现Runnable接口(共享资源)
线程方法: Thread.sleep()
线程睡眠是帮助所有线程获得运行机会的最好方法。
只能控制当前正在运行的线程,使当前线程进入休眠状态,休眠期过后自动苏醒,进入就绪状态,而不是运行状态;因此sleep()方法并不能保证线程结束休眠后立即执行,等待cpu的调度
yield()
线程让步;调用该方法的线程让出cpu调度权,而后cpu随机调用其他线程包括当前让步的线程。
关键字 synchronized:
- 只能同步方法,而不能同步变量和类
- 不必同步类中的所有方法,类可以同时拥有同步和非同步方法(synchronized只能标记非抽象的方法,不能标识成员变量)
- synchronized关键字修饰的方法同时只能被一个线程所访问,直到锁被释放掉;
- 线程睡眠时,任何锁都不会被释放掉
- 线程可以获得多个锁;在一个对象的同步方法里面调用另外一个对象的同步方法,则获取了两个对象的同步锁。
- 同步损害并发性,应该尽可能缩小同步范围。
- 在使用同步代码块时候,应该指定在哪个对象上同步,也就是说要获取哪个对象的锁
如果需要同步静态方法则需要整个类的对象锁
public static synchronized int setName(String name){ Xxx.name = name; } 等价于 public static int setName(String name){ synchronized(Xxx.class){ Xxx.name = name; } }