一、创建方式
①继承Thread类,重写run方法,调用start()方法。
②实现Runnable接口,然后给Thread中传入实现runnable接口的类的对象。
③带有返回值,并且抛出异常的方式。
★实现Callable接口,并且重写call()方法、
★传入实现Callable接口的类的对象,创建FutureTask对象(可以接收到线程执行后的返回值)
★new Thread(furure).start()
二、线程的状态
①新状态(线程已经创建但是没有调用start()方法)
②可运行状态(线程已经调用start()方法,等待去选中运行)
③运行状态(执行线程的run()方法运行该方法)
④等待、阻塞、休眠(线程是活的,但是某些事件实他不能运行,等某些条件出现的时候,他会重新进入可运行状态)
⑤死亡(当线程运行完run()方法或异常退出,该线程死亡,线程一旦死亡不能复生)
三、线程常用的方法
①start():使线程进入到可运行状态
②run():线程运行的主程序。
③Thread.sleep(long millis):thread类的静态方法,使当前运行的线程进行休眠,当时间结束后转为可运行状态,再次被调用的时候,继续执行run中没执行完的程序。
④Thread.yield():暂停当前正在执行的线程,并且返回到可运行状态。
⑤join():非静态方法,当a线程中调用b线程的join()方法时,a线程放弃了对cup的控制权,必须等到b线程执行完毕。
⑥wait():当一个线程获取该对象锁的时候,调用该对象的wait()的时候,该线程释放锁进入到等待状态,直到其他的线程调用该对象的notify()(唤醒当前线程中正在等待的一个线程)或者notify(唤醒当前线程中正在等待的所有的线程)
四、volatile
被volatile修饰的变量是可见性,当变量发生变化的时候,在多个线程间是可以立即发现的。