博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程(七)---多线程同步相关问题
阅读量:6508 次
发布时间:2019-06-24

本文共 982 字,大约阅读时间需要 3 分钟。

hot3.png

多线程(七)---多线程同步相关问题

(一)同步机制

  同步:多线程情况下只保证一次只有一个线程在执行,其他线程进不来,这就是同步机制

  好处:解决了多线程的安全问题

  弊端:减低效率

(二)同步前提

  问:多线程安全问题出现后,加了同步机制依旧有问题,如何解决?

  答:问题原因,不是同一个锁导致的

同步的前提:多线程在同步必须使用同一个锁,这才是多线程的同步

错误代码

public void run(){        while (true){            synchronized (new Object()){ // 每个线程都使用的自己的锁,导致问题发生                if (tickets>0){                    System.out.println(Thread.currentThread().getName()+"------tickets:"+tickets--);                }            }        } }

(三)同步注意点

  多线程同步要分清需要同步的代码,切记不要随意添加synchronized(obj)

(四)同步函数

1)、分析多线程是否存在安全隐患?

    1.线程中是否有共享数据。

    2.是否有多条线程操作共享数据。

2)、同步函数:其实就是在函数上加上了同步关键字进行修饰

3)、同步的表现形式有两种:1.同步代码块 2.同步函数

(五)同步函数使用的锁是什么呢?函数需要被对象调用,那个对象不确定,但是都用this来表示

同步函数使用的锁就是this.

验证同步函数使用的是this。验证需求:启动两个线程。

  1:一个线程负责执行同步代码块(使用明锁)

  2:一个线程负责执行同步函数(使用this)

两个线程执行相同线程任务,如果他们没有相同的锁,说明他们没有同步,会出现数据错误

错误代码演示:

代码演示代码演示错误结果

正确代码演示:

代码演示

(六)验证statci同步函数锁是类名.class

如果同步函数被static修饰呢?

1、static随着类的加载,这时不一定有该类的对象,但是,一定有该类的字节码文件对象

2、这个对象简单的表现形式:类名.class

正确代码演示:

代码演示

转载于:https://my.oschina.net/u/3136594/blog/861924

你可能感兴趣的文章
ECSHOP程序登陆网站后台报错提示:此网页有重定向循环的解决方法
查看>>
YMP开发框架快速上手(三)— 编写第一个控制器
查看>>
谈谈安全狗服云在企业内网中的应用
查看>>
ListView封装实现下拉刷新和上拉加载
查看>>
二叉树(3)——三叉链表示的二叉树
查看>>
typedef与#define的区别
查看>>
一千行MySQL学习笔记
查看>>
让标签横向滑动 盒模型
查看>>
Ubuntu安装Eclipse
查看>>
Groovy&Grails-代码剪辑-日期时间格式化
查看>>
Mybatis 轻松入门教程
查看>>
代码面试最常用的10大算法
查看>>
windows 安装 mongoDB
查看>>
解决在IDEA14 的Maven下 出现 Cannot access in offline mode 问题
查看>>
Ubuntu+MyEclipse+Tomcat发布配置及默认发布路径修改
查看>>
Eclipse
查看>>
CSS兼容的一些常见技巧
查看>>
【使用Postman测试web接口】Postman的安装与入门
查看>>
struts2+velocity找不见toolbox.xml问题
查看>>
insertAdjacentHTML动态插入行
查看>>