`
Jeff88
  • 浏览: 4551 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

线程安全类二:AtomicInteger和同步锁的简单使用

 
阅读更多
import java.util.concurrent.atomic.AtomicInteger;

/*
 * 使用AtomicInteger达到线程的安全
 * 
 * */
/*class ResNumber{
	
	public AtomicInteger  count = new AtomicInteger(0) ;
	
	public  String getNumber() {
		count.incrementAndGet();
		return count.get() + "" ;
	}
	
}

class LocalThreadDemo extends Thread {
	
	private ResNumber resNumber ;
	
	public LocalThreadDemo(ResNumber resNumber) {
		super();
		this.resNumber = resNumber;
	}


	@Override
	public void run() {
			for (int i = 0; i < 3; i ++) {
				System.out.println(getName()+"," + resNumber.getNumber() );
			}
	}
	
}
*/


/*
 * 使用synchronized同样达到线程安全的效果,需要正确的位置上添加合适的锁,这个是
 * 简单的例子,
 * 越复杂越考验设置锁的艺术性
*/
class ResNumber{
	
	public int  count = 0 ;
	
	public synchronized String getNumber() {
		count ++  ;
		return count + "" ;
	}
	
}

class LocalThreadDemo extends Thread {
	
	private ResNumber resNumber ;
	
	public LocalThreadDemo(ResNumber resNumber) {
		super();
		this.resNumber = resNumber;
	}


	@Override
	public void run() {
		synchronized(this) {
			for (int i = 0; i < 3; i ++) {
				System.out.println(getName()+"," + resNumber.getNumber() );
			}
		}
	}
	
}




public class ThreadLocalDemo1 {

	public static void main(String[] args) {
		
		/*
		 * 三个线程公用同一个对象,对象中的变量会累积
		 * AtomicInteger:具有原子性,保证线程的安全    增加:incrementAndGet  取值:get
		 * volatile:虽然可以保证线程间变量的可见性,但不保证具有原子性,属于线程不安全的操作,建议少用
		 * 普通基本数据类型要想保持线程的安全,需要使用synchronized同步锁;而且可能不止一个地方,需要多个
		 * 地方添加,才可能达到目的
		 * 
		 * */
		
		ResNumber resNumber = new ResNumber() ;
		LocalThreadDemo th1 = new LocalThreadDemo(resNumber) ;
		th1.setName("线程1");
		LocalThreadDemo th2 = new LocalThreadDemo(resNumber) ;
		th2.setName("线程2");
		LocalThreadDemo th3 = new LocalThreadDemo(resNumber) ;
		th3.setName("线程3");
		th1.start();
		th2.start();
		th3.start();
		
	}

}

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    基于Java多线程与线程安全实践(源码+使用文档)

    线程安全示例:提供一系列的Java线程安全编程示例,包括同步代码块、同步方法、以及使用锁等。 并发集合操作:展示如何在多线程环境下安全地操作集合类,如ConcurrentHashMap和CopyOnWriteArrayList。 线程生命周期...

    java线程安全总结.doc

    3. **Atomic类**:提供原子操作,例如`AtomicInteger`,`AtomicReference`等,可以在没有同步的情况下实现线程安全。 4. **线程池**:通过预先创建并管理一定数量的线程,减少线程创建和销毁的开销,提高系统效率。 ...

    27_多线程_第2天(线程安全、线程同步、等待唤醒机制、单例设计模式)_讲义

    然而,多线程环境下也会带来一系列问题,如数据不一致性、资源竞争等,因此,理解线程安全、线程同步以及等待唤醒机制至关重要。此外,单例设计模式在确保一个类只有一个实例的同时,提供了全局访问点,也是多线程...

    Java多线程与线程安全实践-基于Http协议的断点续传.rar

    1. **线程安全类**:Java中的某些类被设计为线程安全,如ArrayList与Vector,Vector内部进行了同步处理,而ArrayList则需要开发者自行处理线程安全问题。 2. **volatile关键字**:用于修饰变量,确保所有线程都能...

    Java多线程 - (一) 最简单的线程安全问题

    4. **原子类(Atomic Variables)**:如`AtomicInteger`,它们提供了一种无锁的线程安全实现,适用于简单的原子操作。 ```java import java.util.concurrent.atomic.AtomicInteger; public class Counter { ...

    Java线程使用教程

    1. **线程不安全的类**:如`ArrayList`在并发环境下易引发数据不一致问题,应使用`ConcurrentHashMap`等线程安全的集合类。 2. **volatile关键字**:确保共享变量对所有线程可见,但不保证原子性。 通过学习这个...

    并发编程实践,全面介绍基础知识、JVM同步原语、线程安全、低级并发工具、线程安全容器、高级线程协作工具、Executor部分等

    本文将全面介绍Java并发编程的基础知识、JVM同步原语、线程安全、低级并发工具、线程安全容器、高级线程协作工具以及Executor服务。 1. **基础知识** - **并发与并行**:并发是指多个任务在同一时间段内交替执行,...

    java线程安全总结.pdf

    7. 使用线程安全的集合:java.util.concurrent包中包含了许多线程安全的集合类,例如ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue等,它们可以在多线程环境下安全使用,无需额外的同步。...

    Java常见的线程安全的类.docx

    2. 原子类(Atomicxxx):Java的原子类,如AtomicLong和AtomicInteger,提供了原子操作,它们内部利用Unsafe类的native方法来实现线程安全,无需显式加锁就能保证并发更新的安全性。 3. BlockingQueue和...

    热门Java面试多线程面试题问答Top50共17页.pdf

    8. **线程安全**:学习线程安全的类和非线程安全的类,以及如何确保对象在多线程环境下的正确使用。 9. **并发容器**:如ConcurrentHashMap、ConcurrentLinkedQueue等,以及它们相较于普通容器的改进。 10. **...

    Java并发中的线程安全性

    设计线程安全类的原则 为了设计出线程安全的类,可以遵循以下原则: 1. **避免使用共享可变状态**:通过减少类内部共享的状态数量,可以降低线程安全的复杂度。 2. **利用不可变对象**:使用不可变对象可以自然地...

    JVM性能优化:线程锁优化.docx

    线程锁是确保多线程环境下数据一致性和线程安全的关键机制。以下是对线程锁优化的一些核心知识点的详细说明: 1. **线程的创建与执行**: - Java中创建线程有三种方式:直接继承`java.lang.Thread`类,实现`java....

    java线程文档大全

    2. **线程创建**:Java提供两种方式创建线程,一是直接继承Thread类并重写run()方法,二是实现Runnable接口并定义run()方法,然后通过Thread类的构造函数将Runnable对象传递进去。 3. **线程交互**:线程之间的通信...

    Java 多线程 订票 示例 线程安全

    总结起来,Java多线程在实现订票系统时,需要注意线程安全问题,通过合理使用同步机制、Lock接口和原子类,可以在保证数据一致性的同时提高并发性能。在实际开发中,要根据业务场景选择合适的线程安全策略,以达到...

    java多线程安全性基础介绍.pptx

    java多线程安全性基础介绍 线程安全 正确性 什么是线程安全性 原子性 竞态条件 i++ 读i ++ 值写回i 可见性 JMM 由于cpu和内存加载速度的差距,在两者之间增加了多级缓存导致,内存并不能直接对cpu可见。 ...

    通过多线程编程在Java中发现的并发模式和特性——线程、锁、原子等.zip

    - **java.util.concurrent.atomic包**:包含一系列原子类,如AtomicInteger、AtomicLong等,它们提供了在不使用锁的情况下实现原子更新的能力,适用于高并发场景。 - **compareAndSet()**:原子地比较并设置值,...

    关于线程的动态停止,一个很经典的多线程麦票程序

    - 非同步访问可能导致线程安全问题,例如“售票员卖出负数的票”。因此,必须使用同步机制,如`synchronized`关键字或`Lock`对象来保证对票库存的正确操作。 5. **线程的生命周期**: - 新建(New):线程创建但...

    Java分布式应用学习笔记03JVM对线程的资源同步和交互机制

    4. **原子变量(Atomic Variables)**:Java提供了原子变量类,如`AtomicInteger`、`AtomicLong`等,这些类中的方法都是原子性的,可以在不使用锁的情况下更新共享变量,从而提高程序的并发性能。 5. **线程间通信*...

    Netty多线程并发编程

    Netty提供了多种线程安全类,例如AtomicInteger、AtomicLong等。这些类可以在多线程环境中安全使用,提供了高性能、高可扩展性的解决方案。 四、 读写锁的应用 在Netty中,读写锁是指一种特殊的锁机制,它允许多个...

Global site tag (gtag.js) - Google Analytics