为什么只在命令行里面输入
a=257
b=257
a is b
显示是false
老师,我想问下,当学完这一章后,自己去写游戏时,一点思路都没有,感觉很懵,完全不知道怎么去写,或者知道写的步骤,但写不出来,这种情况,需不需要重新去学呢?
${#authentication.name}这个哪里来的
老师我这个不出class文件是哪里出错了
老师,不是说金额不能用float类型吗?
num是间距数量
问题:
老师麻烦解释下标签<array>是什么意思,和<list>标签有什么区别
从这两个执行计划可以看出一个用到了 我们设计的三个属性的组合索引 一个没用到我们的组合索引 这是什么情况 都是一个属性里面的值 返回的也都是* 为什么一个用到了一个没用到
package com.bjsxt.thread; /** * 使用this作为对象锁 * 使用字符串作为对象锁 * 使用class对象作为对象锁 */ /** * 定义销售员工类 */ class Sale{ private String name; public Sale(String name){ this.name = name; } public void money(){ synchronized ("s") { try { System.out.println(this.name + " 被领导表扬"); Thread.sleep(500); System.out.println(this.name + " 拿钱"); Thread.sleep(500); System.out.println(this.name + " 对公司表示感谢"); Thread.sleep(500); System.out.println(this.name + " 开开心心的拿钱走人"); } catch (InterruptedException e) { e.printStackTrace(); } } } } class Programmer{ private String name; public Programmer(String name){ this.name = name; } /** * 打开电脑 */ public void computer(){ synchronized (this) { try { System.out.println(this.name + " 接通电源"); Thread.sleep(500); System.out.println(this.name + " 按开机按键"); Thread.sleep(500); System.out.println(this.name + " 系统启动中"); Thread.sleep(500); System.out.println(this.name + " 系统启动成功"); } catch (InterruptedException e) { e.printStackTrace(); } } } /** * 编码 */ public void coding(){ synchronized (this){ try { System.out.println(this.name + " 双击 Idea"); Thread.sleep(500); System.out.println(this.name + " Idea 启动完毕"); Thread.sleep(500); System.out.println(this.name + " 开开心心的写代码"); } catch (InterruptedException e) { e.printStackTrace(); } } } /** * 去卫生间 */ public void wc(){ synchronized ("wc") { try { System.out.println(this.name + " 打开卫生间门"); Thread.sleep(500); System.out.println(this.name + " 开始排泄"); Thread.sleep(500); System.out.println(this.name + " 冲水"); Thread.sleep(500); System.out.println(this.name + " 离开卫生间"); } catch (InterruptedException e) { e.printStackTrace(); } } } /** * 领取奖金 */ public void money(){ synchronized ("p") { try { System.out.println(this.name + " 被领导表扬"); Thread.sleep(500); System.out.println(this.name + " 拿钱"); Thread.sleep(500); System.out.println(this.name + " 对公司表示感谢"); Thread.sleep(500); System.out.println(this.name + " 开开心心的拿钱走人"); } catch (InterruptedException e) { e.printStackTrace(); } } } } /** * 打开电脑的工作线程 */ class Working1 extends Thread{ private Programmer p; public Working1(Programmer p){ this.p = p; } @Override public void run() { this.p.computer(); } } /** * 编写代码的工作线程 */ class Working2 extends Thread{ private Programmer p; public Working2(Programmer p){ this.p = p; } @Override public void run() { this.p.coding(); } } /** * 去厕所的线程 */ class Wc extends Thread{ private Programmer p; public Wc(Programmer p){ this.p = p; } @Override public void run() { this.p.wc(); } } /** * 销售部领取奖金的线程 */ class SaleMoney extends Thread{ private Sale s; public SaleMoney(Sale s){ this.s = s; } @Override public void run() { this.s.money(); } } /** * 程序员领取奖金的线程 */ class ProgrammerMoney extends Thread{ private Programmer p; public ProgrammerMoney(Programmer p){ this.p = p; } @Override public void run() { this.p.money(); } } public class ObjectLock { public static void main(String[] args) { /*Programmer zs = new Programmer("张三"); new Working1(zs).start(); new Working2(zs).start();*/ /*Programmer zs = new Programmer("张三"); Programmer ls = new Programmer("李四"); Programmer wu = new Programmer("王五"); new Wc(zs).start(); new Wc(ls).start(); new Wc(wu).start();*/ Programmer ls = new Programmer("李四"); Programmer wu = new Programmer("王五"); Sale s1 = new Sale("王丽丽"); Sale s2 = new Sale("王莉莉"); //new ProgrammerMoney(ls).start(); //new ProgrammerMoney(wu).start(); new SaleMoney(s1).start(); new SaleMoney(s2).start(); } }
老师,用字符串作为对象锁也可以实现各自部门的人去各自部门串行领取奖金,达到和使用class对象作为锁一样的效果。都是可以对多个线程操作多个对象进行同步。前面同学问的问题我看了,字符串可以是不同类,Class只能是同一个类。所以意思各有各的应用场景,但是有时候也能达到一样的效果。
老师,这是我总结的您看一下
this:多个线程操作同一个对象可以实现同步效果
字符串:所有线程操作到具有synchrunized(字符串)的就会实现同步效果
class对象:当多个线程操作到通过同一个类实例化的对象的时候会实现同步效果
老师,wait() 和 notify() 为什么是交叉唤醒的,在馒头的存放中调用了wait() 和 notify() ,代码运行,notify() 为什么唤醒的不是馒头存放的wait() 方法,而是取出馒头的wait() 方法。
老师,您好,我在执行如下程序时
输出的结果正确,
但是当我把print()前面的制表符删除,变成这样
结果如下
老师,请问是什么原因呢?能解释一下吗?我一直想不明白,不是删除制表符print()执行的是全部吗?
怎么没有显示良好?
使用mybatis自动生成的代码比视频中要少,这是什么原因造成的呢
***************\n与\r有区别吗
想请教一下老师,为什么我的字体敲出来之后变成乱码了
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637