创建线程的三种方式:
1.继承Thread类。2.实现Runnable接口。3实现callable接口。
什么是线程安全?
·线程安全就是多线程访问时,采用加锁机制,当一个线程访问某个数据时,进行保护,其他线程不能同时进行访问直到该线程读取完毕,其他线程才可以使用。线程不安全就是多个线程可以同时访问同一个数据,进行修改造成所得的数据是脏数据。
·如何保证线程安全?
1.使用线程安全的类。
2.添加synchronized同步代码块或者用lock锁。
3.多线程并发的情况下,线程共享的变量改为方法局部变量。
Runnable接口和Callable接口的区别
Runnable需要实现run方法,Callable需要实现call方法
Callable可以返回任何对象(因为在Callable接口中可以使用泛型),能抛出checked exception异常
Callable和Runnable都可以和Executors类使用。然而Thread类只能使用Runnable
wait和sleep方法的区别
wait是object方法,sleep是thread方法
wait释放锁,sleep不释放锁
wait需要notify,notifyAll唤醒,sleep时间到就进入就绪状态
wait只用用在同步代码块、同步方法中,sleep可以用在任何地方
wait不需要捕获异常,sleep需要捕获异常
创建线程的四种方式
继承Thread类
实现Runnable接口
实现Callable接口
创建线程池