`

java线程同步<二>

    博客分类:
  • java
 
阅读更多
 
为了解决 线程安全问题,也就是多个线程访问同一个实例变量,而引入了同步的概念

不加同步的代码块

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后:表示当前线程获得该对象锁了,其他线程无法进入锁定区域,直到当前线程执行完该方法体,释放对象才能
分享到:
评论

相关推荐

    java应用程序中使用线程

    3.1 Java线程&lt;br&gt;3.2 创建线程&lt;br&gt;3.3 使用线程的缺点&lt;br&gt;3.3.1 初始启动变慢&lt;br&gt;3.3.2 资源利用&lt;br&gt;3.3.2 资源利用&lt;br&gt;3.4 线程管理&lt;br&gt;3.5 共享资源的使用同步&lt;br&gt;3.5.1 同步方法和同步代码块的嵌套调用...

    java线程同步java线程同步

    java线程同步java线程同步java线程同步

    《Visual.C#.编程精彩百例》配套光盘.part2

    &lt;br&gt;实例39 单个线程同步运行 &lt;br&gt;实例40 多线程同步运行 &lt;br&gt;实例41 线程Thread Relative Static跟踪与实现 &lt;br&gt;实例42 线程池(ThreadPool)的应用 &lt;br&gt;实例43 多线程互斥运行 &lt;br&gt;实例44 多线程时钟应用程序 &lt;br&gt;...

    《Visual.C#.编程精彩百例》配套光盘part1

    &lt;br&gt;实例39 单个线程同步运行 &lt;br&gt;实例40 多线程同步运行 &lt;br&gt;实例41 线程Thread Relative Static跟踪与实现 &lt;br&gt;实例42 线程池(ThreadPool)的应用 &lt;br&gt;实例43 多线程互斥运行 &lt;br&gt;实例44 多线程时钟应用程序 &lt;br&gt;...

    mysql5.1中文手册

    使用二进制分发版的标准MySQL安装&lt;br&gt;2.3. 在Windows上安装MySQL&lt;br&gt;2.3.1. Windows系统要求&lt;br&gt;2.3.2. 选择安装软件包&lt;br&gt;2.3.3. 用自动安装器安装MySQL&lt;br&gt;2.3.4. 使用MySQL安装向导&lt;br&gt;2.3.5. 使用配置向导&lt;br&gt;...

    AIC的Java课程1-6章

    第5 版 清华大学出版社&lt;br&gt; “SCJP学习指南” 人民邮电出版社&lt;br&gt; “Java 编程思想” 第3版 机械工业出版社&lt;br&gt; 教学内容和要求&lt;br&gt;知识点 重要程度 使用频度 难度&lt;br&gt;Java 入门 高 中 易&lt;br&gt;变量和运算符 高 ...

    java线程同步实例

    java线程同步实例,哲学家思考的代码实现,应该是一个比较好的例子

    Java多线程同步论文.doc

    Java多线程同步论文.doc

    java多线程同步例子

    java多线程同步互斥访问实例,对于初学者或是温故而知新的同道中人都是一个很好的学习资料

    Java多线程和同步

    Java线程(二):线程同步synchronized和volatile 详细讲解Java 同步的原理技术资料

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

    java线程第二版中英文 java线程第二版中英文 线程并不是新的概念:许多操作系统和语言都支持它们。在Java出现以前,似乎人人都在谈论线程,却很少有人使用它。用线程编程是技巧性很强的且不可移植。 而在Java中却...

    java线程同步

    java线程同步

    java多线程编程总结

    Java线程:线程的同步-同步方法 Java线程:线程的同步-同步块 Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 ...

    JAVA 线程实现数据库的主从同步更新

    JAVA代码采用线程来实现数据库的主从同步更新

    操作系统实验 多线程同步与互斥 java编写 有界面

    操作系统实验 多线程同步与互斥 java编写 可动态创建

    java 线程同步 信号量控制同步

    关于线程同步 synchronize,需要牢牢记住的第一点是:线程同步就是线程排队。同步就是排队。线程同步的目的就是避免线程“同步”执行。

    Java多线程编程总结

    Java线程:线程的同步-同步方法 Java线程:线程的同步-同步块 Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的...

    Java 线程同步调用

    Java 线程同步调用的使用,以及同步方法的调用!

    java 多线程同步方法的实例

    java 多线程同步方法的实例 java 多线程同步方法的实例 java 多线程同步方法的实例

    java线程同步的例子.doc

    java线程同步的例子.doc java线程同步的例子.doc

Global site tag (gtag.js) - Google Analytics