简述什么是线程安全问题,为什么会出现?怎么解决

线程安全问题:
在操作系统中,进程之间的数据是隔离的。但是注意:如果是一个进程里面多个线程,线程之间是共享一个进程的
在Java中,如果使用多个Thread线程启动同一个Runable的线程对象,此时这些线程会共享Runable对象中的属性,就容易出现线程安全问题(非线程安全问题)。

什么是线程安全的?
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,
就是线程安全的。
或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。

出现线程安全问题是因为在一个进程里面当多个线程对同一个线程对象进行启动,此时就容易出现线程安全问题。

怎么解决?
使用加锁解决,在Java中目前加锁有两种
1、synchronized关键字
2、Lock(1.5JDK)

synchronized关键字的使用
|–synchronized语法块
synchronized(对象){
需要加锁的代码
}
|–synchronized可以修饰方法
锁的范围越小越好

Lock:jdk1.5提供
Lock lock = new ReentrantLock();

你可能感兴趣的:(简述什么是线程安全问题,为什么会出现?怎么解决)