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

温州市微网站制作电话晚上睡不着推荐个网站

温州市微网站制作电话,晚上睡不着推荐个网站,企业网站建设费用账务处理,网站价钱synchronized方法、synchronized块 线程的同步不安全的线程示例1:示例2示例3 synchronized方法、synchronized块 线程的同步 并发:同一个对象被多个线程同时操作。 解决方案:让多个线程排队操作对象。 使用队列和锁解决多线程的并发问题。 同…

synchronized方法、synchronized块

    • 线程的同步
    • 不安全的线程
      • 示例1:
      • 示例2
      • 示例3
    • synchronized方法、synchronized块

线程的同步

并发:同一个对象被多个线程同时操作。

解决方案:让多个线程排队操作对象。

使用队列和锁解决多线程的并发问题。

同进程的多线程共享同一块存储空间,当多个线程同时访问某块内存空间时,就存在并发问题。为了保证数据在方法中被访问时的正确性,在访问时加入锁机制synchronized;当线程获得对象的排它锁,该线程独占资源,其他线程必须等待其使用后释放锁即可。

同时也伴随着一些问题:

  • 一个线程持有锁导致其它线程所有需要此锁的线程挂起
  • 在多线程竞争下,加锁,释放锁会导致比较多的上下文切换和调度延时,导致性能问题
  • 也可能存在优先级高的线程等待优先级低的线程释放锁,而导致性能问题。

不安全的线程

通过下面例子说明,线程是不安全。

重复执行下面方法,执行结果可能会有多种情况。

示例1:

//每次执行结果都不是我们预想的结果
public class UnsafeBuyTicket {public static void main(String[] args) {BuyTicket buyTicket = new BuyTicket();new Thread(buyTicket,"张三").start();new Thread(buyTicket,"李四").start();new Thread(buyTicket,"王五").start();}
}class BuyTicket implements Runnable {private int ticketNums = 10;boolean flag = true;@Overridepublic void run() {while (flag) {buy();}}//synchronized 同步方法 锁的是this 即BuyTicket对象private /**synchronized*/ void buy() {if (ticketNums <= 0) {flag = false;return;}try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "买到票" + ticketNums--);}
}
张三买到票9
李四买到票8
王五买到票10
李四买到票7
王五买到票6
张三买到票7
张三买到票5
李四买到票4
王五买到票5
李四买到票3
张三买到票3
王五买到票3
王五买到票2
张三买到票2
李四买到票2
李四买到票1
王五买到票1
张三买到票1

示例2

public class UnsafeBank {public static void main(String[] args) {Account funds = new Account("家庭基金", 100);new TakeMoney(funds,60,"you").start();new TakeMoney(funds,80,"youWife").start();}}class Account{String name;int money;public Account(String name, int money) {this.name = name;this.money = money;}
}class TakeMoney extends Thread{Account account;int takeMoney;//取多钱钱int nowMoney;//你口袋里面的钱public TakeMoney(Account account, int takeMoney, String name) {super(name);this.account = account;this.takeMoney = takeMoney;}//synchronized run 是不行的@Overridepublic void run() {//synchronized (account) {if ((account.money - takeMoney) < 0) {System.out.println(Thread.currentThread().getName() + "余额不足。");return;}try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}account.money = account.money - takeMoney;nowMoney = nowMoney + takeMoney;System.out.println(account.name + "余额为:" + account.money);System.out.println(this.getName() + "口袋里面的钱:" + nowMoney);//}}
}
//执行结果
家庭基金余额为:-40
家庭基金余额为:-40
you口袋里面的钱:60
youWife口袋里面的钱:80

示例3

public class UnsafeList {public static void main(String[] args) throws InterruptedException {List<String> list = new ArrayList<String>();for (int i = 0; i < 10000; i++) {new Thread(() -> {//synchronized (list) {list.add(Thread.currentThread().getName());// }}).start();}Thread.sleep(3000);//确保上面线程能够执行完毕后在打印list.sizeSystem.out.println(list.size());}
}
//执行结果
9999

针对上面示例,添加synchronized关键字,使其变为线程安全的。

synchronized方法、synchronized块

关键字synchronized可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一个时刻,只能有一个线程处于方法或者同步块中,它保证了线程对变量访问的可见性和排他性

synchronized方法控制对象的访问,每个对象对应一把锁,每个synchronized方法都必须获得该方法对象的锁才能执行,否则会阻塞线程,方法执行时独占该锁,知道方法执行完毕才会释放锁。

同步块:synchronized(object){}

synchronized修饰的代码块,会在object对象上加一个监视器。而同步方法会在当前对象this上增加一个监视器。

synchronized同步代码块一般加载共享资源对象上。

 //示例1 将buy方法改为同步方法private synchronized void buy()//示例2 试图按照示例1的方案 将run方法改为同步方法,验证是不行的,因为加上run方法的synchronized将对TakeMoney类添加的监视器,但最终操作的确是account对象,//此示例 多线程操作的共共享资源是account,并非TakeMoney//示例3 在共享资源list增加synchronized关键字,为其添加监视器
http://www.yayakq.cn/news/456451/

相关文章:

  • 厦门建设局网站首页6企业网站建设策划书 前言
  • 网站搭建百家号做美缝在哪个网站接单
  • 伊宁市做网站百度只收录网站首页
  • 做网站需要注意WordPress添加前台投稿插件
  • 19年做网站广州网站设计企业
  • 网页游戏网站在线玩学网站建设要多久
  • 有经验的赣州网站建设wordpress前台注册
  • 专业做京东网站吗辽阳网站建设58
  • 建设网站什么软件比较好dedecms调用不同数据库wordpress
  • 做搜狗手机网站点击软网站建设服务类型现状
  • 正规的网站建设公5151ppt网站建设
  • 设计接单网站大全可以做软件的网站有哪些功能
  • 如何在百度上建立网站南京电商网站开发
  • 海棠网站是什么意思wordpress不支持ie9
  • 乐清做网站培训.net网站做优化
  • 网站开发中为什么有两个控制层做网站 域名是怎么回事
  • 望谟网站建设未来5年网络规划设计师
  • php网站开发如何实现删除功能深圳装修公司口碑排名
  • 用路由侠做网站在电脑上做网站
  • 动漫做的游戏 迅雷下载网站电子商务网站建设基础步骤
  • 网站ui设计给用户提交什么网络营销策划
  • 做化妆品的网站二建转注辽宁建设主管部门网站
  • 南京网站策划公司近期热点话题
  • 做cps的网络文学网站网站正在维护中 模板
  • 安阳专业做网站公司wordpress官方中文主题
  • 可以做相册的网站职业培训网络平台
  • 廊坊网站排名方案绍兴大公司有哪些
  • 建设网站相关法律条文文创产品设计书籍
  • 校园网站建设管理办法洛阳网站建设seo
  • 中卫网站设计公司苏州市建设局安监站网站