多线程的四种状态:
接口可以用来拓展类的功能
创建线程的第二种方式:实现Runnable接口。
1、定义类实现Runnable接口。
2、覆盖接口中的run方法,将线程的任务代码封装到run方法中,
3、通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类构造函数的参数进行传递。
为甚呢?因为线程的任务都封装在Runnable接口的子类对象的run方法中,所以要再线程对象创建时就必须明确要运行的任务。
4、调用线程对象的start方法,开启线程。
Runnable仅仅是将线程的任务进行了对象的封装。
实现Runnable接口的好处:
1、将线程的任务从线程的子类中分离出来,进行了单独的封装。
2、避免了java单继承的局限性。
例子:卖票
线程安全问题产生的原因:
1、多个线程在操作共享的数据。
2、操作共享数据的线程代码有多条。
当一个线程在执行操作共享数据的多条代码过程中,其他线程参与了运算,就会导致线程安全问题的产生。
解决思路:
将多条操作共享数据的线程代码封装起来,其他线程是不可以参与运算的,必须要当前线程把这些代码都执行完毕后,其他线程才可以参与进来。
在java中用同步代码块就可以解决这个问题。
同步代码块的格式
synchronize(对象)
{
需要被同步的代码。
}
至于为什么?以及同步的好多?为啥要同步我会在下一篇里学习跟进:
连接为:暂时还没学到,过一天加进来。。。()