黑马程序员_同步代码块的作用(synchronized关键字)
来源:互联网 发布:淘宝入驻平台 编辑:程序博客网 时间:2024/05/17 01:10
------- android培训、java培训、期待与您交流!----------
同步代码块(synchronized关键字):
1,书写格式:synchronized(对象) { 需要被同步的代码块 }
2,同步的前提:
①必须要有两个或者两个以上的线程;
②必须是多个线程使用同一个锁(同一共享数据);
注意:要保证同步中只能有一个线程运行。
3,同步的好处:解决了多线程的安全问题;
4,同步的弊端:多个线程需要判断锁,较为消耗资源;
5,如何确定代码块是否需要同步?
①明确 哪些代码是多线程要运行的代码;
②明确共享数据;
③明确多线程运行代码中哪些语句是操作共享数据的。
下面通过代码体现同步代码看的使用方式:
class Tickets implements Runnable{private static int tick = 100;Object obj = new Object();public void run(){while(true){synchronized(obj){//synchronized(可以是任意对象){}大括号中的就是共享的数据if(tick>0){try {Thread.sleep(20);} catch (Exception e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+" sale: "+tick--);}}}}}public class Demo17 {public static void main(String[] args) {// TODO Auto-generated method stubTickets t = new Tickets();new Thread(t).start();//多个线程使用同一个锁(或者称为同一共享数据)new Thread(t).start();new Thread(t).start();}}
6,synchronized可以用来修饰函数,称为同步函数 ,因为函数需要被对象调用,函数都有一个所属对象调用,就是this,所以同步函数使用的锁也是this;举例说明:
class Ticket implements Runnable{private static int tick = 100;public void run(){while(true){show();}}public synchronized void show(){//同步函数使用的锁是thisif(tick>0){try {Thread.sleep(20);} catch (Exception e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+" sale: "+tick--);}}}public class Demo16{public static void main(String[] args) {Ticket t = new Ticket();new Thread(t).start();new Thread(t).start();new Thread(t).start();}}
7,同步函数被静态修饰后使用的锁是什么呢?因为静态进内存时,内存中没有本类对象,但是有该类对应的字节码对象,
类名.class,该对象的类型是Class,所以静态同步函数使用的锁是该方法所在类的字节码对象也就是类名.class。
举例说明:
class Single{private Single(){}private static Single s = null;public static Single getInstance(){if(s==null){synchronized(Single.class){//Object obj = new Object();如果括号里放obj是错误的。if(s==null){s = new Single();}}}return s ;}}
- 黑马程序员_同步代码块的作用(synchronized关键字)
- 黑马程序员_同步代码块(三)——1.5版本后synchronized的更改
- 黑马程序员_同步代码块(二)
- 黑马程序员——synchronized同步代码块
- 黑马程序员_代码块
- 黑马程序员_代码块
- synchronized同步代码块
- synchronized同步代码块
- synchronized同步代码块
- 黑马程序员_Java基础[26]_线程2、同步代码块、同步函数
- 黑马程序员_关于java中代码块的问题
- 黑马程序员——同步代码块
- JAVA之旅(十三)——线程的安全性,synchronized关键字,多线程同步代码块,同步函数,同步函数的锁是this
- 黑马程序员_静态代码块
- 黑马程序员_静态代码块
- 黑马程序员_分类协议代码块
- 同步代码块synchronized (Object)
- 黑马程序员--代码块、this关键字、静态代码块的笔记
- 矩阵转址的一般算法(OC实现)
- 关于VEH+硬件断点打内存补丁 实现细节
- Selenium2.0 WebDriver基本操作
- 专题3-3.条件编译使用分析(国嵌C语言视频)
- 嵌入式系统 Boot Loader 技术内幕
- 黑马程序员_同步代码块的作用(synchronized关键字)
- sed
- SCNU_2013省赛选拔赛#2(Just for 12)解题报告
- COW技术(写时复制技术)
- 位运算操作相关
- Linux 引导过程内幕
- 输入a,b,c3个整数,按从大到小顺序输出(C语言)
- 【C语言】C语言实现文件内容的复制
- 我对锤子ROM 功能的看法——视觉篇