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版精华区 <br>含java jsp及js等精华帖子合集<br>适合收藏 查询<br><br>序号 精华区主题 <br>--------------------------------<br> 1. [目录]Java教程 <br> 1. [目录]Java语言教程 <br> 2. [目录]来自java的传说...
由于SnakeYAML库的实现不是线程安全的,因此不同的线程必须具有自己的Yaml实例。 加载YAML文档 SnakeYAML库支持从String或InputStream加载文档。可以使用Yaml类的load()方法将YAML文档加载到一个Map对象中。例如:...
<br>UltraEdit 7.2<br>WebGain Studio 4 with VisualCafe<br>Forte for Java开发指南<br>Dreamweaver UltraDev<br>IBM NetObjects ScriptBuilder3.0<br>使用HomeSite加速JSP的开发<br>Java2的安全新特性下的Applet...
这篇博客文章将探讨如何在Java中实现这样一个线程安全的循环单链表,并通过源码分析来加深理解。 首先,我们需要定义一个表示链表节点的类`Node`,它包含两个属性:`value`存储节点的值,`next`指向下一个节点。...
<br><br><br>译者序<br>前言<br>第1章 多线程<br>第2章 集合<br>第3章 网络<br>第4章 数据库编程<br>第5章 分布式对象<br>第6章 高级Swing<br>第7章 高级AWT<br>第8章 JavaBean构件<br>第9章 安全<br>第10章 国际化...
<br><br><br>译者序<br>前言<br>第1章 多线程<br>第2章 集合<br>第3章 网络<br>第4章 数据库编程<br>第5章 分布式对象<br>第6章 高级Swing<br>第7章 高级AWT<br>第8章 JavaBean构件<br>第9章 安全<br>第10章 国际化...
<br><br><br>译者序<br>前言<br>第1章 多线程<br>第2章 集合<br>第3章 网络<br>第4章 数据库编程<br>第5章 分布式对象<br>第6章 高级Swing<br>第7章 高级AWT<br>第8章 JavaBean构件<br>第9章 安全<br>第10章 国际化...
它将面向对象、平台无关性、稳固性、安全性、多线程等诸多特性集于一身,为用户提供了一个良好的程序设计环境。<br><br><br><br> Java提供了强大的应用程序接口,即Java类库。它包括大量已设计好的工具类,帮助...
Java提供了一系列的线程安全集合类,它们是专门为多线程环境设计的。 首先,我们要了解什么是线程安全。线程安全是指一个类或者方法在多线程环境中被调用时,能够正确地处理并发访问,不会因为线程间的交互而产生...
Java线程安全是多线程编程中的一个关键概念,它涉及到多个线程访问共享资源时可能出现的问题。在Java中,线程安全问题通常与并发、内存模型和可见性有关。Java内存模型(JMM)定义了如何在多线程环境下共享数据的...
Java线程安全是多线程编程中的一个关键概念,它涉及到在并发环境下如何正确地管理共享资源,确保程序的正确性和一致性。以下是对Java线程安全的深入总结: ### 一、线程安全的定义 线程安全是指当多个线程访问同一...
1. **线程安全**:由于多线程环境下可能存在数据竞争,所以在访问共享资源(如数据库连接)时,需要确保线程安全。可以使用`synchronized`关键字或者`Lock`来同步访问。 2. **事务管理**:在多线程环境中,可能需要...
例如,可以使用 ThreadLocal 来实现线程安全,ThreadLocal 是 Java 中的一个类,它提供了线程安全的变量存储机制。使用 ThreadLocal 可以使每个线程拥有一个自己的变量副本,从而避免了线程安全问题。 下面是一个...
这是因为Java标准库中大多数集合类默认不是线程安全的,如`HashSet`、`ArrayList`、`LinkedList`和`HashMap`等。 #### 解决方案 针对集合类的同步问题,有多种解决策略: 1. **使用`synchronized`同步块** - **...
所有的类都是不可变的,并且是线程安全的。标准的 toString() 函数可以格式化数据成为人类可读的形式,此程序已经通过了 JUnit 测试,构建的时候需要 Maven。 Maven 构建: <dependency> <groupId>us.fatehi</...
它展示了如何与非线程安全的类共同工作,并特别关注于Swing的线程问题。新增加的一章介绍了如何为多处理器机器编写并行代码。 简而言之,本书的新版涉及了有关线程的方方面面,从最简单的动画applet到最复杂的应用...
总之,理解并掌握Java中的线程安全问题及其解决方案是每个Java开发者必备的技能,这不仅可以确保程序的正确性,还能有效利用多核处理器,提升系统性能。在阅读源码时,也要注意观察作者如何处理线程安全,这对于提升...
BoneCP是一款高效、轻量级的Java数据库连接池实现,它在设计上注重了性能和线程安全。 BoneCP的配置文件通常以`bonecp-default-config.xml`的形式存在,这是设置连接池参数的关键文件。在该文件中,开发者可以定制...
Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多...
其实java的多线程并发问题最终都会反映在java的内存模型上,所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改。总结java的内存模型,要解决两个主要的问题:可见性和有序性。我们都知道计算机有高速缓存...