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; } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。