浅析Java多线程同步synchronized

 更新时间:2018年02月28日 08:50:41   作者:彬菌  
本篇文章给大家详细分析了Java多线程同步synchronized的相关知识点,需要的读者们可以参考学习下。

单线程是安全的,因为线程只有一个,不存在多个线程抢夺同一个资源

代码例子:

public class SingleThread {
	int num=10;
	public void add(){
		while(num<13){
			num++;
			try{
				Thread.sleep(1000);
			}
			catch(Exception e){
				System.out.println("中断");
			}
			System.out.println(num);
		}
	}
	public static void main(String[] args){
		Thread thread = Thread.currentThread(); //获取当前运行的线程对象
		thread.setName("单线程"); //线程重命名
		System.out.println(thread.getName()+"正在运行");
		SingleThread st=new SingleThread();
		st.add();
	}
}

多线程安全,synchronized同步代码块

synchronized(对象){}; //同步代码块

synchronized 返回值 方法名(){}; //同步方法

class One {
	 int num=10;
	 public void add(){ 
		synchronized(this){ //同步代码块,同步方法也可以实现效果synchronized void add(){};
		num++;
	  try {
	   Thread.sleep(1000);
	  } catch (InterruptedException e) {
	  	System.out.println("中断");
	  }
	  System.out.println(num);
	  }
	 }
	}
	class Two implements Runnable{
	 One one = new One();
	 @Override
	 public void run() {
		 one.add(); //调用add方法
	 }
	}
	public class Synch{
	 public static void main(String[] args) {
		Two two = new Two();
	  Thread t1 = new Thread(two); //创建三个子线程
	  Thread t2 = new Thread(two);
	  Thread t3 = new Thread(two);
	  t1.start();
	  t2.start();
	  t3.start();
	 }
}

注意:观察去除synchronized关键字的运行结果区别!

正常运行结果:

11
12
13

相关文章

  • Spring Boot基于Active MQ实现整合JMS

    Spring Boot基于Active MQ实现整合JMS

    这篇文章主要介绍了Spring Boot基于Active MQ实现整合JMS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • SpringBoot项目优雅的全局异常处理方式(全网最新)

    SpringBoot项目优雅的全局异常处理方式(全网最新)

    这篇文章主要介绍了SpringBoot项目优雅的全局异常处理方式(全网最新),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 通过实例解析spring对象生命周期

    通过实例解析spring对象生命周期

    这篇文章主要介绍了通过实例解析spring对象生命周期,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Spring如何使用xml创建bean对象

    Spring如何使用xml创建bean对象

    这篇文章主要介绍了Spring如何使用xml创建bean对象,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • jmeter压力测试工具简介_动力节点Java学院整理

    jmeter压力测试工具简介_动力节点Java学院整理

    这篇文章主要为大家详细介绍了jmeter压力测试工具相关介绍资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 在SpringBoot中集成H2数据库的完整指南

    在SpringBoot中集成H2数据库的完整指南

    Spring Boot是一个简化企业级Java应用程序开发的强大框架,H2数据库是一个轻量级的、开源的SQL数据库,非常适合用于开发和测试,本文将指导您如何在Spring Boot应用程序中集成H2数据库,并探索一些高级配置选项,需要的朋友可以参考下
    2024-10-10
  • Java中队列Queue和Deque的区别与代码实例

    Java中队列Queue和Deque的区别与代码实例

    学过数据结构的,一定对队列不陌生,java也实现了队列,下面这篇文章主要给大家介绍了关于Java中队列Queue和Deque区别的相关资料,需要的朋友可以参考下
    2021-08-08
  • mybatis注解之@Mapper和@MapperScan的使用

    mybatis注解之@Mapper和@MapperScan的使用

    这篇文章主要介绍了mybatis注解之@Mapper和@MapperScan的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java Lombok简介、使用、工作原理、优缺点

    Java Lombok简介、使用、工作原理、优缺点

    这篇文章主要介绍了Java Lombok简介、使用、工作原理、优缺点的相关资料,帮助大家更好的理解和学习使用Java Lombok,感兴趣的朋友可以了解下
    2021-03-03
  • maven安装、使用、配置本地仓库、idea配置maven以及解决plugins报错问题

    maven安装、使用、配置本地仓库、idea配置maven以及解决plugins报错问题

    本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目时首先会从本地仓库查找资源,如果没有那么Maven会从远程仓库下载到你本地仓库,这篇文章主要给大家介绍了关于maven安装、使用、配置本地仓库、idea配置maven以及解决plugins报错问题的相关资料,需要的朋友可以参考下
    2024-01-01

最新评论