线程的状态
CPU的执行资格:可以被CPU处理,在处理队列中排队。
CPU的执行权:正在被CPU处理。
创建线程的第二种方式:实现Runnable接口。
1.定义类实现Runnable接口。
2.覆盖接口中的run方法,将线程的任务代码封装到run方法中。
3.通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递。
为什么?
因为线程的任务都封装在Runnable接口子类对象的run方法中,所以要在线程对象创建时就必须明确要运行的任务。
4.调用线程对象的start方法开启线程。
实现Runnable接口的好处:
1.将线程的任务从线程的子类中分离出来,进行了单独的封装,按照面向对象的思想将任务封装成对象。
2.避免了Java单继承的局限性。
所以,创建线程的第二种方式较为常用。
线程安全问题产生的原因:
1.多个线程在操作共享的数据。//前提
2.操作共享数据的代码有多条。//前提
当一个线程在执行操作共享数据的多条代码过程中。其他线程参与了运算。就会导致线程安全问题的产生。