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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是线程安全,实现线程安全都有哪些方法相关的知识,希望对你有一定的参考价值。

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


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


5.线程的同步与死锁

1.什么是同步

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

2.为什么要同步

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

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

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

3.进行同步的格式

同步代码块

synchronized (同步的线程对象)

需要同步的代码块;

同步方法

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

   方法内容

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

4.什么是死锁

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

死锁的解决

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

5.注意点

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

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



参考技术A

什么是线程安全?

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

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

方法案例:

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的基本单位指令运行时的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

参考技术B http://blog.csdn.net/haolongabc/article/details/7249098

以上是关于什么是线程安全,实现线程安全都有哪些方法的主要内容,如果未能解决你的问题,请参考以下文章

什么是线程安全?

什么是线程安全?

什么是线程安全?

Java线程安全和非线程安全

java 之前的安全的类回顾,以及以后需要线程安全时使用哪些类

Java中线程安全的集合浅析