当前位置: 首页 > news >正文

武汉在建项目一览表/百度seo标题优化软件

武汉在建项目一览表,百度seo标题优化软件,我想做个网站,福州网站运营转载自:http://www.cnblogs.com/yanghuahui/p/3365922.html synchronized用于多线程设计,有了synchronized关键字,多线程程序的运行结果将变得可以控制。synchronized关键字用于保护共享数据。 synchronized实现同步的机制:synchr…

转载自:http://www.cnblogs.com/yanghuahui/p/3365922.html


synchronized用于多线程设计,有了synchronized关键字,多线程程序的运行结果将变得可以控制。synchronized关键字用于保护共享数据。

synchronized实现同步的机制:synchronized依靠"锁"机制进行多线程同步,"锁"有2种,一种是对象锁,一种是类锁

  • 1.依靠对象锁锁定

初始化一个对象时,自动有一个对象锁。synchronized {普通方法}依靠对象锁工作,多线程访问synchronized方法,一旦某个进程抢得锁之后,其他的进程只有排队对待。


synchronized {普通方法}依靠对象锁工作,多线程访问synchronized方法,一旦某个进程抢得锁之后,其他的进程只有排队对待。
synchronized void method{}功能上,等效于
void method{
synchronized(this) {
...
}
}
通过代码看比较清楚:
复制代码
public class TestSynchronized {public synchronized void method1() throws InterruptedException {System.out.println("method1 begin at:" + System.currentTimeMillis());Thread.sleep(6000);System.out.println("method1 end at:" + System.currentTimeMillis());}public synchronized void method2() throws InterruptedException {while(true) {System.out.println("method2 running");Thread.sleep(200);}}static TestSychronized instance = new TestSychronized();public static void main(String[] args) {Thread thread1 = new Thread(new Runnable() {@Overridepublic void run() {try {instance.method1();} catch (InterruptedException e) {e.printStackTrace();}for(int i=1; i<4; i++) {try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Thread1 still alive");}                    }});Thread thread2 = new Thread(new Runnable() {@Overridepublic void run() {try {instance.method2();} catch (InterruptedException e) {e.printStackTrace();}}});thread1.start();thread2.start();    }
}
复制代码

运行结果:thread2一直等到thread1中的method1执行完了之后才执行method2,说明method1和method2互斥

复制代码
method1 begin at:1381584063557
method1 end at:1381584069557
method2 running
method2 running
Thread1 still alive
method2 running
Thread1 still alive
method2 running
Thread1 still alive
method2 running
method2 running
method2 running
method2 running
method2 running
method2 running
method2 running
method2 running

 

复制代码
synchronized {修饰代码块}的作用不仅于此,synchronized void method{}整个函数加上synchronized块,效率并不好。在函数内部,可能我们需要同步的只是小部分共享数据,其他数据,可以自由访问,这时候我们可以用 synchronized(表达式){//语句}更加精确的控制
  • 2.synchronized {static方法}此代码块等效于
void method{
synchronized(Obl.class)
}
}
使用该类的类对象的锁定去做线程的共享互斥.
复制代码
package com.free4lab.lol;public class TestSychronized {public synchronized static void method1() throws InterruptedException {System.out.println("method1 begin at:" + System.currentTimeMillis());Thread.sleep(6000);System.out.println("method1 end at:" + System.currentTimeMillis());}public synchronized static void method2() throws InterruptedException {while(true) {System.out.println("method2 running");Thread.sleep(200);}}static TestSychronized instance1 = new TestSychronized();static TestSychronized instance2 = new TestSychronized();public static void main(String[] args) {Thread thread1 = new Thread(new Runnable() {@Overridepublic void run() {try {instance1.method1();} catch (InterruptedException e) {e.printStackTrace();}for(int i=1; i<4; i++) {try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Thread1 still alive");}                    }});Thread thread2 = new Thread(new Runnable() {@Overridepublic void run() {try {instance2.method2();} catch (InterruptedException e) {e.printStackTrace();}}});thread1.start();thread2.start();    }
}
复制代码

输出效果也是method1和method2互斥

  • 3.synchronized {run方法}run方法的锁定.
这个举例比较好说。
复制代码
package com.free4lab.lol;public class TestSychronized {static TestSychronized instance = new TestSychronized();public static void main(String[] args) {Thread thread1 = new Thread(new Runnable() {@Overridepublic synchronized void run() {for(int i=1; i<4; i++) {try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Thread1 still alive, " + i);}                    }});new Thread(thread1).start();new Thread(thread1).start();}
}
复制代码

如果加了synchronized当前线程取完所有数据后,才会释放锁,输出结果是有序的:

Thread1 still alive, 1
Thread1 still alive, 2
Thread1 still alive, 3
Thread1 still alive, 1
Thread1 still alive, 2
Thread1 still alive, 3

http://www.lbrq.cn/news/1562473.html

相关文章:

  • 科技网站建设分析/补肾壮阳吃什么药效果好
  • 零代码开发/信阳seo推广
  • 国外特效网站/站长工具平台
  • 域名服务器ip/麒麟seo
  • 慈善公益网站建设/建站模板网站
  • 有哪些做网站好的公司好/武汉seo优化排名公司
  • 怎么分析竞争对手网站/网络营销成功案例
  • 做暖暖免费视频网站/新的数据新闻
  • 用css做网站的好处/北京网络营销招聘
  • 代办公司注册流程及材料/seo推广服务
  • b站推广引流最佳方法/seo推广有哪些方式
  • 快速迁移网站/seo模拟点击软件源码
  • 响应式企业网站制作公司/行者seo无敌
  • 郑州郑东新区网站建设/长尾词排名优化软件
  • 东营 网站建设/如何提高自己在百度的排名
  • 传奇做网站/seo网站推广什么意思
  • 网站视频链接/西安网站建设推广专家
  • 网站开发 例子/卢松松外链工具
  • 广州市建设监理协会网站/哪些店铺适合交换友情链接
  • 装饰公司营销型网站建设/西安关键词排名推广
  • 平顶山市建设委员会网站/郑州搜索引擎优化
  • 西安高校定制网站建设公司推荐/优化网站平台
  • 做游戏陪玩网站/推广文案范例
  • 网站建设市场分析报告/口碑营销案例ppt
  • 江苏句容市疫情最新情况/青岛seo网站关键词优化
  • 有人在相亲网站骗人做传销/单页面seo搜索引擎优化
  • 网站筛选功能/我在百度下的订单如何查询
  • 路由器 东莞网站建设/建站流程主要有哪些
  • 免费网站模板下载大全下载/百度快照是干嘛的
  • 网站开发有限公司/青岛seo外包公司
  • Vue 3与React内置组件全对比
  • Docker目录的迁移
  • aws(学习笔记第五十一课) ECS集中练习(3)
  • 深度解读 Browser-Use:让 AI 驱动浏览器自动化成为可能
  • 朗空量子与 Anolis OS 完成适配,龙蜥获得抗量子安全能力
  • SQL182 连续两次作答试卷的最大时间窗