栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

浅析Java多线程同步synchronized

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

浅析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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/141561.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号