为了解决 线程安全问题,也就是多个线程访问同一个实例变量,而引入了同步的概念。
不加同步的代码块:
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线程同步java线程同步
<br>实例39 单个线程同步运行 <br>实例40 多线程同步运行 <br>实例41 线程Thread Relative Static跟踪与实现 <br>实例42 线程池(ThreadPool)的应用 <br>实例43 多线程互斥运行 <br>实例44 多线程时钟应用程序 <br>...
<br>实例39 单个线程同步运行 <br>实例40 多线程同步运行 <br>实例41 线程Thread Relative Static跟踪与实现 <br>实例42 线程池(ThreadPool)的应用 <br>实例43 多线程互斥运行 <br>实例44 多线程时钟应用程序 <br>...
使用二进制分发版的标准MySQL安装<br>2.3. 在Windows上安装MySQL<br>2.3.1. Windows系统要求<br>2.3.2. 选择安装软件包<br>2.3.3. 用自动安装器安装MySQL<br>2.3.4. 使用MySQL安装向导<br>2.3.5. 使用配置向导<br>...
第5 版 清华大学出版社<br> “SCJP学习指南” 人民邮电出版社<br> “Java 编程思想” 第3版 机械工业出版社<br> 教学内容和要求<br>知识点 重要程度 使用频度 难度<br>Java 入门 高 中 易<br>变量和运算符 高 ...
java线程同步实例,哲学家思考的代码实现,应该是一个比较好的例子
Java多线程同步论文.doc
java多线程同步互斥访问实例,对于初学者或是温故而知新的同道中人都是一个很好的学习资料
Java线程(二):线程同步synchronized和volatile 详细讲解Java 同步的原理技术资料
java线程第二版中英文 java线程第二版中英文 线程并不是新的概念:许多操作系统和语言都支持它们。在Java出现以前,似乎人人都在谈论线程,却很少有人使用它。用线程编程是技巧性很强的且不可移植。 而在Java中却...
java线程同步
Java线程:线程的同步-同步方法 Java线程:线程的同步-同步块 Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 ...
JAVA代码采用线程来实现数据库的主从同步更新
操作系统实验 多线程同步与互斥 java编写 可动态创建
关于线程同步 synchronize,需要牢牢记住的第一点是:线程同步就是线程排队。同步就是排队。线程同步的目的就是避免线程“同步”执行。
Java线程:线程的同步-同步方法 Java线程:线程的同步-同步块 Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的...
Java 线程同步调用的使用,以及同步方法的调用!
java 多线程同步方法的实例 java 多线程同步方法的实例 java 多线程同步方法的实例
java线程同步的例子.doc java线程同步的例子.doc