为了解决 线程安全问题,也就是多个线程访问同一个实例变量,而引入了同步的概念。
不加同步的代码块:
package com.xxg.reflect;
public class Test3 {
public static void main(String[] args) {
CSD cs = new CSD();
Thread th1 = new Thread(cs);
Thread th2 = new Thread(cs);
th1.start();
th2.start();
}
}
class CSD implements Runnable{
public int a ;
public void run() {
a++;
try {
Thread.sleep(1000);
System.out.println("【当前线程】-----"+Thread.currentThread().getName()+"----a---"+a);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//===============================测试结果=======================
【当前线程】-----Thread-0----a---2
【当前线程】-----Thread-1----a---2
从上面结果看,在第一个线程执行run()方法时,进入sleep()后,第二个线程修改了实例变量所以打印的结果都为2
加了同步方法的代码块:
package com.xxg.reflect;
public class Test3 {
public static void main(String[] args) {
CSD cs = new CSD();
Thread th1 = new Thread(cs);
Thread th2 = new Thread(cs);
th1.start();
th2.start();
}
}
class CSD implements Runnable{
public int a ;
public void run() {
synchronized (this) {
a++;
try {
Thread.sleep(1000);
System.out.println("【当前线程】-----"+Thread.currentThread().getName()+"----a---"+a);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//========================测试结果================================
【当前线程】-----Thread-0----a---1
【当前线程】-----Thread-1----a---2
解释:加上synchronized后:表示当前线程获得该对象锁了,其他线程无法进入锁定区域,直到当前线程执行完该方法体,释放对象才能。
分享到:
相关推荐
3.1 Java线程<br>3.2 创建线程<br>3.3 使用线程的缺点<br>3.3.1 初始启动变慢<br>3.3.2 资源利用<br>3.3.2 资源利用<br>3.4 线程管理<br>3.5 共享资源的使用同步<br>3.5.1 同步方法和同步代码块的嵌套调用...
关于线程同步,需要牢牢记住的第二点是 “共享”这两个字。只有共享资源的读写访问才需要同步。如果不是共享资源,那么就根本没有同步的必要。 关于线程同步,需要牢牢记住的第三点是,只有“变量”才需要同步访问...
本文档深入探讨了Java集合类在多线程环境下的同步问题及其解决方案,这是Java软件开发中的一项重要技能。主要内容涵盖集合类同步的基础概念、不同同步策略的应用以及JDK 5.0引入的并发集合类。 #### 集合类的同步...
java线程同步java线程同步java线程同步
在Java编程环境中,...总之,使用Java线程实现数据库主从同步更新是一种常见且实用的技术手段,它涉及到多线程编程、数据库操作、事务管理等多个方面。理解和掌握这些知识点对于开发高可用性的分布式系统至关重要。
总结一下,Java线程同步的关键点: 1. **线程同步是为了解决共享资源的并发访问问题,防止数据不一致和冲突。** 2. **同步意味着线程排队,依次访问共享资源,而不是同时访问。** 3. **只有共享变量(可变状态)才...
在Java编程语言中,线程安全是多线程环境下编程时必须...总的来说,实现一个线程安全的循环单链表需要关注数据结构的设计、线程同步以及并发操作的处理。通过理解和实践这些概念,我们可以构建更健壮、高效的并发程序。
"Java多线程同步.pdf" Java多线程同步是指在Java语言中,如何使用synchronized关键字和其他同步机制来确保多线程程序的正确执行。在Java语言中,synchronized关键字用于对方法或者代码块进行同步,但是仅仅使用...
Java线程同步与通信是多线程编程中的关键概念,用于解决并发访问共享资源时可能出现的数据不一致性和竞态条件问题。以下将详细介绍这两个主题,以及如何通过代码示例进行演示。 1. **线程同步**: 线程同步是确保...
List<Future<Void>> futures = new ArrayList<>(); for (String sql : sqlList) { Future<Void> future = executor.submit(new DatabaseTask(conn, sql)); futures.add(future); } // 等待所有任务完成 for ...
java多线程同步互斥访问实例,对于初学者或是温故而知新的同道中人都是一个很好的学习资料
在深入探讨Java线程同步调用这一主题之前,我们首先需要理解线程同步的基本概念及其在多线程环境中的重要性。线程同步是多线程编程中的一个关键概念,它确保了多个线程在访问共享资源时不会发生冲突,避免了数据不...
Java线程(二):线程同步synchronized和volatile 详细讲解Java 同步的原理技术资料
在“操作系统实验 多线程同步与互斥 java编写 有界面”的实验中,可能需要设计一个图形用户界面(GUI),通过按钮或事件触发线程的创建和同步操作,直观地展示线程间的交互和同步效果。例如,可以模拟银行账户转账,...
List<String> addedItems = new ArrayList<>(list2); addedItems.removeAll(list1); ``` `addedItems`现在包含了`list2`中新添加的元素。 2. **编辑集合**: 编辑集合通常涉及元素的修改。在两个List中找到...
java线程第二版中英文 java线程第二版中英文 线程并不是新的概念:许多操作系统和语言都支持它们。在Java出现以前,似乎人人都在谈论线程,却很少有人使用它。用线程编程是技巧性很强的且不可移植。 而在Java中却...
在Java编程中,多线程技术常常用于模拟现实世界中的并发场景,比如模拟排队叫号系统。这个系统可以通过创建多个线程来代表等待服务的客户,一...在这个过程中,我们学习了线程同步、队列操作以及如何在Java中实现线程。
Java多线程同步是编程中一个非常重要的概念,特别是在并发编程中,用于解决多个线程访问共享资源时可能引发的数据不一致问题。本实例通过一个简单的火车票售票系统来演示同步机制的应用。 在这个实例中,我们创建了...