什么是线程安全,实现线程安全有哪些方法

 我来答
御道风云
推荐于2017-12-16 · TA获得超过1474个赞
知道小有建树答主
回答量:86
采纳率:0%
帮助的人:66.9万
展开全部

自己学习的时候做了一些笔记,希望对你有帮助


当一个类已经很好的同步以保护它的数据时,这个类就称为“线程安全的”---我没有跑题...


5.线程的同步与死锁

1.什么是同步

通过synchronized关键字标识方法或者代码块,限制线程对其内容的操作(同步详细介绍参见 .)

2.为什么要同步

java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),

将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,

从而保证了该变量的唯一性和准确性.

3.进行同步的格式

同步代码块

synchronized (同步的线程对象){

需要同步的代码块;

}

同步方法

synchronized 其他访问修饰符返回值方法名称(){

   方法内容

}

(synchronized也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类)

4.什么是死锁

死锁是进程死锁的简称,是指多个进程循环等待它方占有的资源而无限期地僵持下去的局面。它是计算机操作系统乃至并发程序设计中最难处理的问题之一

死锁的解决

(死锁详细介绍参见进程死锁及解决办法.docx)

5.注意点

1.同步是一种高开销的操作,因此应该尽量减少同步的内容。

  通常没有必要同步整个方法,使用synchronized代码块同步关键代码即可。



hello_mirs
2018-04-12 · TA获得超过4125个赞
知道小有建树答主
回答量:35
采纳率:0%
帮助的人:1.1万
展开全部

什么是线程安全?

  • 定义:指代码能够被多个线程调用而不会产生灾难性后果;

  • 特点:不要求代码在多个线程中高效的运行,只要求能够安全地运行;

方法案例:

1. 使用 synchronized 关键字来获取锁

public class MaxScore {
int max;
public MaxScore() {
max = 0;
}
public synchronized void currentScore(int s) {
if(s> max) {
max = s;
}
}
public int max() {
return max;
}
}


2. 添加另一个方法

public synchronized void reset() {
max = 0;
}


3. 两个独立的同步方法

import java.util.*;
public class Jury {
Vector members;
Vector alternates;
public Jury() {
members = new Vector(12, 1);
alternates = new Vector(12, 1);
}
public synchronized void addMember(String name) {
members.add(name);
}
public synchronized void addAlt(String name) {
alternates.add(name);
}
public synchronized Vector all() {
Vector retval = new Vector(members);
retval.addAll(alternates);
return retval;
}
}


线程

线程是程序中一个单一的顺序控制流程。进程内有一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指令运行时的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
2b金夕
2016-08-31 · TA获得超过287个赞
知道小有建树答主
回答量:768
采纳率:0%
帮助的人:356万
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式