java中如何实现线程安全呢?
下文笔者java中实现线程安全的方法分享,如下所示:
线程不安全代码
在i值操作时,加入synchronized关键字,即可实现此处操作,每次只有一个线程进行操作
线程安全的简介
我们将满足以下条件的线程称之为“线程安全”- 每个线程都能正常的执行原子操作,保证得到正确的结果
- 这个类的对象可以同时被多个线程安全的访问
- 在每个线程的原子操作都完成后,对象处于我们既定的状态
常见的线程安全类简介: 1.只读类,因为它里面的数据不会发生变化,每个线程读取到的数据都一样,所以它是一个线程安全的类,如:String类 2.可变类,如加入了synchronized关键字修饰的StringBuffer类 多线程要保持线程安全,通常会在关键点变成单线程,采用此种锁的模式, 可保证线程安全例:
线程不安全代码
package com.java265.other;
public class Test {
public static void main(String[] args) {
// 开启100个线程
for (int i = 0; i < 100; i++) {
new Thread(() -> {
A.run();
}).start();
}
System.out.println(A.i);
}
}
class A {
static int i = 0;
public static void run() {
while (i < 100) {
try {
Thread.sleep(1);
} catch (Exception e) {
}
i = i + 1;
}
}
public static int getI() {
return i;
}
}
-----运行以上代码,将输出一个大于100的数字
-----此时则出现了不是我们预期的数据
-----此时就是由于线程不安全造成的异常
线程安全的示例分享在i值操作时,加入synchronized关键字,即可实现此处操作,每次只有一个线程进行操作
synchronized (A.class) {
if (i < 100) {
i = i + 1;
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


