线程的生命周期可以分为五个部分,如图所示:

sleep()和wait()相同点:
1、wait()和sleep()方法都可以让线程暂时中止
sleep()和wait()不同点:
1、sleep()不会释放锁,wait()会释放锁
2、sleep()是Thread类的静态方法,wait()是Object类方法
3、sleep()用于让线程在一定时间内停止,wait()大多用于线程间的交互和通信
4、sleep()会自动唤醒,wait()可以通过notify()或notifyAll()来唤醒wait的线程。
原子操作是指一个不受其他操作影响的操作任务单元。原子操作是在多线程环境下避免数据不一致必须的手段。
int++并不是一个原子操作,所以当一个线程读取它的值并加1时,另外一个线程有可能会读到之前的值,这就会引发错误。
为了解决这个问题,必须保证增加操作是原子的,在JDK1.5之前我们可以使用同步技术来做到这一点。到JDK1.5,java.util.concurrent.atomic包提供了int和long类型的封装类,它们可以自动的保证对于他们的操作是原子的并且不需要使用同步。
有两种创建线程的方法:一是实现Runnable接口,然后将它传递给Thread的构造函数,创建一个Thread对象;二是直接继承Thread类。