多线程的状态:
创建线程的第二种方式:实现Runnable接口。
(1)定义一个类实现Runnable。
(2)覆盖Runnable接口中的run方法,将线程要运行的任务代码存储到该方法中。
(3)通过Thread类创建线程对象,并将实现了Runnable接口的对象作为Thread类的构造函数的参数进行传递。
(4)调用THread类的start方法开启线程。
实现Runnable接口的好处:
(1)避免了继承Thread类的单继承的局限性(继承了Thread类就不能继承其他类了)。
(2)Runnable接口的出现更符合面向对象,将线程单独进行对象的封装。
(3)Runnable接口出现降低了线程对象和线程任务的耦合性。
所以,以后创建线程都使用第二种方法。
多线程的安全问题:
产生原因: 1、线程任务中有处理到共享数据 。
2、线程任务中有多条线程对共享数据操作。 一个线程在操作共享数据的过程中,其他线程参与运算,造成数据错误。
解决思想:只要保证多线程操作共享数据的代码在某一段时间内被一条线程所执行,在执行期间不允许其他线程参与运算。
用到了同步代码块。
synchronized (object){
//需要同步的代码。
}
同步在目前情况下保证了一次只有一个线程在执行,其他线程进不来。这就是同步的锁机制。
同步的好处: 解决了多线程的安全问题。
弊端: 降低效率(可接受)
有可能出现这样一中情况,嫁了同步机制,安全问题依旧!
这一定是同步出现了问题。
只要遵守同步的前提就能解决问题:
多个线程在同步中必须使用同一个锁(Object)