多线程——同步函数
来源:互联网 发布:淘宝店如何转让 编辑:程序博客网 时间:2024/06/17 06:02
/*需求:银行有一个金库。有两个储户分别存300员,每次存100,存3次。目的:该程序是否有安全问题,如果有,如何解决?如何找问题:1,明确哪些代码是多线程运行代码。2,明确共享数据。3,明确多线程运行代码中哪些语句是操作共享数据的。*/class Bank{private int sum;//Object obj = new Object();public synchronized void add(int n){//synchronized(obj)//{sum = sum + n;try{Thread.sleep(10);}catch(Exception e){}System.out.println("sum="+sum);//}}}class Cus implements Runnable{private Bank b = new Bank();public void run(){for(int x=0; x<3; x++){b.add(100);}}}class BankDemo{public static void main(String[] args) {Cus c = new Cus();Thread t1 = new Thread(c);Thread t2 = new Thread(c);t1.start();t2.start();}}
/*如果同步函数被静态修饰后,使用的锁是什么呢?通过验证,发现不在是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()+"....code : "+ tick--);}}}}elsewhile(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 StaticMethodDemo{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多线程㈡—线程安全问题(同步代码块or同步函数)
- 多线程(四)——多线程安全问题之同步函数(This Lock )
- 多线程——线程同步
- 多线程同步——互斥锁
- 多线程同步——信号量
- JAVA之旅(十三)——线程的安全性,synchronized关键字,多线程同步代码块,同步函数,同步函数的锁是this
- Java 多线程 静态同步函数
- JAVA多线程静态同步函数
- 多线程五(同步静态函数)
- Java笔记 - 多线程-同步函数
- C++中头文件(.h)和源文件(.cpp)
- JDBC的批量批量插入
- 对n的阶乘取余
- hihocoder 1062 : 最近公共祖先·一
- Openstack裸机部署--horizon篇
- 多线程——同步函数
- ZOJ1203(最小生成树kruskal算法)Swordfish
- 【Ubuntu】将新的分区挂载到home目录
- Cocos2D入门
- poj2186 Popular Cows【强连通】
- iOS开发技巧
- 欢迎使用CSDN-markdown编辑器
- PostgreSQL on Ubuntu 14.04
- Hibernate如何配置实体类到数据库表的映射