多线程-同步代码快的锁及同步方法应用和锁的问题
来源:互联网 发布:部分便笺元数据已损坏 编辑:程序博客网 时间:2024/06/01 08:02
package cn.itcast_11;public class SellTicket implements Runnable {// 定义100张票private static int tickets = 100;// 定义同一把锁private Object obj = new Object();private Demo d = new Demo();private int x = 0;//同步代码块用obj做锁//@Override//public void run() {//while (true) {//synchronized (obj) {//if (tickets > 0) {//try {//Thread.sleep(100);//} catch (InterruptedException e) {//e.printStackTrace();//}//System.out.println(Thread.currentThread().getName()//+ "正在出售第" + (tickets--) + "张票 ");//}//}//}//}//同步代码块用任意对象做锁//@Override//public void run() {//while (true) {//synchronized (d) {//if (tickets > 0) {//try {//Thread.sleep(100);//} catch (InterruptedException e) {//e.printStackTrace();//}//System.out.println(Thread.currentThread().getName()//+ "正在出售第" + (tickets--) + "张票 ");//}//}//}//}@Overridepublic void run() {while (true) {if(x%2==0){synchronized (SellTicket.class) {if (tickets > 0) {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+ "正在出售第" + (tickets--) + "张票 ");}}}else {//synchronized (d) {//if (tickets > 0) {//try {//Thread.sleep(100);//} catch (InterruptedException e) {//e.printStackTrace();//}//System.out.println(Thread.currentThread().getName()//+ "正在出售第" + (tickets--) + "张票 ");//}//}sellTicket();}x++;}}//private void sellTicket() {//synchronized (d) {//if (tickets > 0) {//try {//Thread.sleep(100);//} catch (InterruptedException e) {//e.printStackTrace();//}//System.out.println(Thread.currentThread().getName()//+ "正在出售第" + (tickets--) + "张票 ");//}//}//}//如果一个方法一进去就看到了代码被同步了,那么我就再想能不能把这个同步加在方法上呢?// private synchronized void sellTicket() {//if (tickets > 0) {//try {//Thread.sleep(100);//} catch (InterruptedException e) {//e.printStackTrace();//}//System.out.println(Thread.currentThread().getName()//+ "正在出售第" + (tickets--) + "张票 ");//}//}private static synchronized void sellTicket() {if (tickets > 0) {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+ "正在出售第" + (tickets--) + "张票 ");}}}class Demo {}
package cn.itcast_11;/* * A:同步代码块的锁对象是谁呢? * 任意对象。 * * B:同步方法的格式及锁对象问题? * 把同步关键字加在方法上。 * * 同步方法锁对象是谁呢? * this * * C:静态方法及锁对象问题? * 静态方法的锁对象是谁呢? 根本就不是this * 类的字节码文件对象。(反射会讲) */public class SellTicketDemo {public static void main(String[] args) {// 创建资源对象SellTicket st = new SellTicket();// 创建三个线程对象Thread t1 = new Thread(st, "窗口1");Thread t2 = new Thread(st, "窗口2");Thread t3 = new Thread(st, "窗口3");// 启动线程t1.start();t2.start();t3.start();}}
阅读全文
0 0
- 多线程_同步代码快的锁及同步方法应用和锁的问题
- 多线程-同步代码快的锁及同步方法应用和锁的问题
- 多线程---java同步方法和同步代码块的区别
- 同步方法和同步代码快
- 同步代码快和同步方法
- Java【多线程知识总结(7)】多线程同步问题-关于synchronized代码块和synchronized方法的应用
- 同步代码和同步方法、锁的理解
- 验证同步代码块与同步函数的锁【多线程】
- 验证同步代码块与同步函数的锁【多线程】
- 从头认识多线程-2.18 同步方法与同步静态代码块持有的是不同的锁
- 多线程安全问题及代码的同步
- 多线程的同步问题代码实例
- Java多线程 5 同步方法的锁
- 多线程的同步方法及实现
- 多线程同步的方法
- 多线程同步的方法
- 多线程下的懒汉模式,同步代码块和同步方法
- 多线程的同步问题
- java中static{}语句块详解
- Java小案例——判断所给年份是平年还是闰年
- 小P寻宝记---粗心的基友(01背包)
- linux系统下已经配置了ifcfg-eth0但不生效
- ThinkPHP前端跟后端取数据用法
- 多线程-同步代码快的锁及同步方法应用和锁的问题
- A Review on Deep Learning Techniques Applied to Semantic Segmentation(译)-(2)
- android 调用系统命令实现关机2017亲测有效
- MySQL用户权限管理详解
- 层的隐藏
- 计算机安全
- 套接字编程(二)-----基于UDP协议
- 学习淘淘商城第八十四课(单点登录检查数据是否可用---Controller层及测试)
- 警告: [SetContextPropertiesRule]{Context} Setting property source to org.eclipse.jst.jee.serve