java多线程-同步函数的锁
来源:互联网 发布:linux 删除文件夹失败 编辑:程序博客网 时间:2024/06/07 20:28
/* 通过分析打印出错误票多线程的运行出现了安全问题。 问题的原因:当多条语句在操作同一个线程共享数据时,一个线程对多条语句执行了一部分,还没有执行完另一个线程参与进来执行。导致共享数据的错误。解决办法:对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不能参与执行。java对多线程的安全的问题提供了专业的解决方式。同步代码块。synchronized(对象){ 需要被同步的代码}同步函数。public synchronized void fun(){ 需要被同步的代码块}同步函数用的哪一个锁函数需要被对象调用,那么函数都有一个所属对象的引用,就是this。所以同步函数使用的锁是this通过验证使用两个线程来买票一个线程在同步代码块中一个线程在同步函数中都在执行买票动作。如果同步函数被静态修饰后,使用的锁不是this因为静态方法中不可以定义this。静态进内存时,内存中没有本类对象,但是一定有该类对应的字节码对象。类名.class 该对象的类型是class。使用的锁是该类对应的字节码对象 类名.class*/class Ticket implements Runnable{private static int tick = 100;Object obj = new Object();boolean flag = true;public void run(){if(flag){ while(true){synchronized(Ticket.class){if(tick>0){try{Thread.sleep(10);}catch(Exception e){}System.out.println(Thread.currentThread().getName()+"--synchronized : "+ tick--);} }}}else{while(true)show();}}public static synchronized void show(){if(tick>0){try{Thread.sleep(10);}catch(Exception e){}System.out.println(Thread.currentThread().getName()+"--show-- : "+ tick--);}}}class TicketTest{public static void main(String[] args){Ticket t = new Ticket();Thread t1 = new Thread(t);Thread t2 = new Thread(t);t1.start();try{Thread.sleep(10);}catch(Exception e){}t.flag = false;t2.start();}}
0 0
- java多线程-同步函数的锁
- java 多线程 同步函数 。同步函数的锁 和 静态同步函数的锁
- JAVA 多线程静态同步函数的锁是class 对象
- java多线程-同步函数的锁是this
- java多线程-静态同步函数的锁是Class对象
- JAVA 多线程静态同步函数的锁是class 对象
- Java 多线程 静态同步函数
- JAVA多线程静态同步函数
- Java笔记 - 多线程-同步函数
- Java笔记3 多线程<1>线程概述、多线程的创建、多线程的安全问题、静态同步函数的锁、死锁
- java的多线程同步
- Java 多线程的同步
- Java 多线程的同步
- Java多线程的同步
- 验证同步代码块与同步函数的锁【多线程】
- 验证同步代码块与同步函数的锁【多线程】
- 多线程(多线程-同步函数的锁是this)
- java多线程同步锁
- 关于SQL数据库的异地备份(三)
- 什么是kafka
- 设计模式之外观模式
- 由response.setContentType()方法开始谈JSP/Servelt上传下载文件
- GCM Google官方示例的简单介绍和使用
- java多线程-同步函数的锁
- IIS8 安装 PHP
- oracle11g在命令行下修改sys密码后还是不能登录
- NYOJ 247 虚拟的城市之旅 SPFA
- Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
- Linux中多线程
- Java多线程基础知识整理
- php文件锁详解及解决实例
- java学习笔记之反射