java中如何实现线程安全呢?

java问题王 Java经验 发布时间:2021-10-04 11:58:31 阅读数:15463 1
下文笔者java中实现线程安全的方法分享,如下所示:

线程安全的简介

我们将满足以下条件的线程称之为“线程安全”
  1. 每个线程都能正常的执行原子操作,保证得到正确的结果
  2. 这个类的对象可以同时被多个线程安全的访问
  3. 在每个线程的原子操作都完成后,对象处于我们既定的状态
常见的线程安全类简介:
   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;
	}
  }
线程安全的示例分享
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202110/16333199931363.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者