`

java线程安全<一>

    博客分类:
  • java
 
阅读更多
  java线程安全分主要分2快
 
1.实例变量且为单例模式为非线程安全,实例变量不为单例则线程安全
2.局部变量线程安全。




实例变量线程模拟
public class Test1 {
	
	
	public static void main(String[] args) {
		
		B b = new B();
		Thread th1 = new Thread(b, "one"); //2个线程都对应同一个target对象b (单例模式)非线程安全
		Thread th2 = new Thread([color=red]b[/color], "two");
		th1.start();
		th2.start();
		
		
	}

}
class B implements Runnable{

	 public int x; // B类的实例变量
	
	public void run() {
		
		for(int i=0;i<5;i++){
			  x++;
			System.out.println("[当前线程]----------"+Thread.currentThread().getName()+"====="+"实例变量的值----x="+x);
		}
		
	}
	
	
}
//==========================测试结果=================================

[当前线程]----------one=====实例变量的值----x=1
[当前线程]----------two=====实例变量的值----x=2
[当前线程]----------one=====实例变量的值----x=3
[当前线程]----------two=====实例变量的值----x=4
[当前线程]----------one=====实例变量的值----x=5
[当前线程]----------two=====实例变量的值----x=6
[当前线程]----------one=====实例变量的值----x=7
[当前线程]----------two=====实例变量的值----x=8
[当前线程]----------one=====实例变量的值----x=9
[当前线程]----------two=====实例变量的值----x=10

//由于2个线程维护同一个变量X 所以该x最后的值为10

如果把上面红色的b改为new B() 即不是单例模式,则输出结果为:
引用


[当前线程]----------one=====实例变量的值----x=1
[当前线程]----------one=====实例变量的值----x=2
[当前线程]----------one=====实例变量的值----x=3
[当前线程]----------one=====实例变量的值----x=4
[当前线程]----------one=====实例变量的值----x=5
[当前线程]----------two=====实例变量的值----x=1
[当前线程]----------two=====实例变量的值----x=2
[当前线程]----------two=====实例变量的值----x=3
[当前线程]----------two=====实例变量的值----x=4
[当前线程]----------two=====实例变量的值----x=5
则最后x值为5


局部变量线程模拟
package com.xxg.reflect;

public class Test1 {
	
	
	public static void main(String[] args) {
		
		B b = new B();
		B b1 = new B();
		Thread th1 = new Thread(b, "one"); //2个线程都对应同一个target对象b (单例模式)非线程安全
		Thread th2 = new Thread(b, "two");
		th1.start();
		th2.start();
		
		
	}

}
class B implements Runnable{

	 // B类的实例变量
	
	public void run() {
		
		 [color=red]int x=0;[/color]
		for(int i=0;i<5;i++){
			  x++;
			System.out.println("[当前线程]----------"+Thread.currentThread().getName()+"====="+"实例变量的值----x="+x);
		}
		
	}
	
	
}
//===========================测试结果============================

[当前线程]----------one=====实例变量的值----x=1
[当前线程]----------one=====实例变量的值----x=2
[当前线程]----------one=====实例变量的值----x=3
[当前线程]----------one=====实例变量的值----x=4
[当前线程]----------one=====实例变量的值----x=5
[当前线程]----------two=====实例变量的值----x=1
[当前线程]----------two=====实例变量的值----x=2
[当前线程]----------two=====实例变量的值----x=3
[当前线程]----------two=====实例变量的值----x=4
[当前线程]----------two=====实例变量的值----x=5

分享到:
评论

相关推荐

    JAVA基于SnakeYAML实现解析与序列化YAML

    由于SnakeYAML库的实现不是线程安全的,因此不同的线程必须具有自己的Yaml实例。 加载YAML文档 SnakeYAML库支持从String或InputStream加载文档。可以使用Yaml类的load()方法将YAML文档加载到一个Map对象中。例如:...

    水木清华站∶Java版精华区 含jsp及js等集合.chm

    Java版精华区 &lt;br&gt;含java jsp及js等精华帖子合集&lt;br&gt;适合收藏 查询&lt;br&gt;&lt;br&gt;序号 精华区主题 &lt;br&gt;--------------------------------&lt;br&gt; 1. [目录]Java教程 &lt;br&gt; 1. [目录]Java语言教程 &lt;br&gt; 2. [目录]来自java的传说...

    JSP訳文--工具--Java

    &lt;br&gt;UltraEdit 7.2&lt;br&gt;WebGain Studio 4 with VisualCafe&lt;br&gt;Forte for Java开发指南&lt;br&gt;Dreamweaver UltraDev&lt;br&gt;IBM NetObjects ScriptBuilder3.0&lt;br&gt;使用HomeSite加速JSP的开发&lt;br&gt;Java2的安全新特性下的Applet...

    JAVA实现一个线程安全的循环单链表

    这篇博客文章将探讨如何在Java中实现这样一个线程安全的循环单链表,并通过源码分析来加深理解。 首先,我们需要定义一个表示链表节点的类`Node`,它包含两个属性:`value`存储节点的值,`next`指向下一个节点。...

    Java 2核心技术 卷II:高级特性(第七版).part3

    &lt;br&gt;&lt;br&gt;&lt;br&gt;译者序&lt;br&gt;前言&lt;br&gt;第1章 多线程&lt;br&gt;第2章 集合&lt;br&gt;第3章 网络&lt;br&gt;第4章 数据库编程&lt;br&gt;第5章 分布式对象&lt;br&gt;第6章 高级Swing&lt;br&gt;第7章 高级AWT&lt;br&gt;第8章 JavaBean构件&lt;br&gt;第9章 安全&lt;br&gt;第10章 国际化...

    Java 2核心技术 卷II:高级特性(第七版).part2

    &lt;br&gt;&lt;br&gt;&lt;br&gt;译者序&lt;br&gt;前言&lt;br&gt;第1章 多线程&lt;br&gt;第2章 集合&lt;br&gt;第3章 网络&lt;br&gt;第4章 数据库编程&lt;br&gt;第5章 分布式对象&lt;br&gt;第6章 高级Swing&lt;br&gt;第7章 高级AWT&lt;br&gt;第8章 JavaBean构件&lt;br&gt;第9章 安全&lt;br&gt;第10章 国际化...

    Java 2核心技术 卷II:高级特性(第七版).part1

    &lt;br&gt;&lt;br&gt;&lt;br&gt;译者序&lt;br&gt;前言&lt;br&gt;第1章 多线程&lt;br&gt;第2章 集合&lt;br&gt;第3章 网络&lt;br&gt;第4章 数据库编程&lt;br&gt;第5章 分布式对象&lt;br&gt;第6章 高级Swing&lt;br&gt;第7章 高级AWT&lt;br&gt;第8章 JavaBean构件&lt;br&gt;第9章 安全&lt;br&gt;第10章 国际化...

    Java2+类库参考手册-pdf

    它将面向对象、平台无关性、稳固性、安全性、多线程等诸多特性集于一身,为用户提供了一个良好的程序设计环境。&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt; Java提供了强大的应用程序接口,即Java类库。它包括大量已设计好的工具类,帮助...

    Java多线程安全集合

    Java提供了一系列的线程安全集合类,它们是专门为多线程环境设计的。 首先,我们要了解什么是线程安全。线程安全是指一个类或者方法在多线程环境中被调用时,能够正确地处理并发访问,不会因为线程间的交互而产生...

    java线程安全测试

    Java线程安全是多线程编程中的一个关键概念,它涉及到多个线程访问共享资源时可能出现的问题。在Java中,线程安全问题通常与并发、内存模型和可见性有关。Java内存模型(JMM)定义了如何在多线程环境下共享数据的...

    java线程安全总结.doc

    Java线程安全是多线程编程中的一个关键概念,它涉及到在并发环境下如何正确地管理共享资源,确保程序的正确性和一致性。以下是对Java线程安全的深入总结: ### 一、线程安全的定义 线程安全是指当多个线程访问同一...

    java多线程处理数据库数据

    1. **线程安全**:由于多线程环境下可能存在数据竞争,所以在访问共享资源(如数据库连接)时,需要确保线程安全。可以使用`synchronized`关键字或者`Lock`来同步访问。 2. **事务管理**:在多线程环境中,可能需要...

    Java非线程安全类变线程安全类.pdf

    例如,可以使用 ThreadLocal 来实现线程安全,ThreadLocal 是 Java 中的一个类,它提供了线程安全的变量存储机制。使用 ThreadLocal 可以使每个线程拥有一个自己的变量副本,从而避免了线程安全问题。 下面是一个...

    Java软件开发实战 Java基础与案例开发详解 12-5 集合类的同步问题 共8页.pdf

    这是因为Java标准库中大多数集合类默认不是线程安全的,如`HashSet`、`ArrayList`、`LinkedList`和`HashMap`等。 #### 解决方案 针对集合类的同步问题,有多种解决策略: 1. **使用`synchronized`同步块** - **...

    磁道数据解析器MagneticTrackParser.zip

    所有的类都是不可变的,并且是线程安全的。标准的 toString() 函数可以格式化数据成为人类可读的形式,此程序已经通过了 JUnit 测试,构建的时候需要 Maven。 Maven 构建: &lt;dependency&gt;  &lt;groupId&gt;us.fatehi&lt;/...

    线程 JAVA java线程 java线程第3版 java线程第2版第3版合集

    它展示了如何与非线程安全的类共同工作,并特别关注于Swing的线程问题。新增加的一章介绍了如何为多处理器机器编写并行代码。 简而言之,本书的新版涉及了有关线程的方方面面,从最简单的动画applet到最复杂的应用...

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

    总之,理解并掌握Java中的线程安全问题及其解决方案是每个Java开发者必备的技能,这不仅可以确保程序的正确性,还能有效利用多核处理器,提升系统性能。在阅读源码时,也要注意观察作者如何处理线程安全,这对于提升...

    基于java的数据库连接池 BoneCP.zip

    BoneCP是一款高效、轻量级的Java数据库连接池实现,它在设计上注重了性能和线程安全。 BoneCP的配置文件通常以`bonecp-default-config.xml`的形式存在,这是设置连接池参数的关键文件。在该文件中,开发者可以定制...

    Java多线程与线程安全实践(基于Http协议的断点续传)源码.zip

    Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多...

    Java线程安全问题_动力节点Java学院整理

    其实java的多线程并发问题最终都会反映在java的内存模型上,所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改。总结java的内存模型,要解决两个主要的问题:可见性和有序性。我们都知道计算机有高速缓存...

Global site tag (gtag.js) - Google Analytics