首页 > 编程语言 > 详细

多线程安全

时间:2020-01-13 13:54:21      阅读:61      评论:0      收藏:0      [点我收藏+]

什么是线程安全问题?

当多个线程共享一个全局变量或者静态变量,做写的时候,可能会受到其他线程的干扰,导致数据有 问题,这种现象叫做线程干扰问题。

线程安全的解决办法:

① synchronized ——自动锁

② lock----jdk1.5并发包——手动锁

synchronized的用法:

使用条件:

①必须要有两个线程以上,需要发生同步。

②多个线程想同步,必须用同一把锁。

③保证只有一个线程进行执行。

工作原理:

①有一个线程已经拿到了锁,其他线程已经有CPU执行权,一直排队,等待其他线程释放锁。

②锁在代码执行完毕或者程序抛出异常都会被释放掉。

③锁一旦被释放掉的话,其他线程就开始获取锁进去同步中去。

缺点:

工作效率非常低。

什么是同步代码块?

就是将可能会发生线程安全问题的代码,用“synchronized”给包括起来。

    synchronized(同一个数据) {

       //可能会发生线程安全问题的代码
    }


什么是同步函数?

在方法上用“synchronized”修饰,称之为同步函数。同步函数使用的是“this”锁。

什么是静态同步函数?

在同步函数上用静态关键字(static)修饰,称之为静态同步函数。静态同步函数使用当前类的字节码文件作为锁。

什么是多线程死锁?

就是同步中嵌套同步,导致锁无法释放的现象产生就是多线程死锁。

多线程三大特性:

①原子性:保证线程的独一无二、一致性,保证线程安全问题。

②可见性:当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

③有序性:程序执行的顺序按照代码的先后顺序执行。

Volatile关键字:

作用:保证线程之间可见,但是不保证线程的原子性即线程的安全问题。

使用AtomicInteger原子类:

AtomicInteger是一个提供原子操作的Integer类,通过线程安全的方式操作加减,使用“AtomicInteger”关键字可以解决“Volatile”关键字造成的线程安全问题。

多线程安全

原文:https://www.cnblogs.com/gujian2/p/12186842.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!