这个week.values()是什么?没有印象了呢 之前在哪学的来着
老师为什么实用if-else返回的结果是这样的
package com.bjsxt.thread.prosumer2; /** * <p>Title: TestProducer</p> * <p>Description: 生产者模式</p> * @author xiaoding * @date Jul 20, 2020 * @version 1.0 */ public class TestProducer implements Runnable{ //功能属性 private TestSupermarket supermarket; //超市 //构造方法 public TestProducer(TestSupermarket supermarket) { this.supermarket = supermarket; } //定义线程体 @Override public void run() { for (int i = 0;i<10;i++) { if (i % 2 != 0) { supermarket.set("旺仔", "小馒头"); }else { supermarket.set("康师傅", "方便面"); } } } } public class TestSupermarket { // 功能属性 private String brand; //品牌 private String name; //名称 private boolean flag; //开关判断是否需要唤醒线程 //构造方法 public TestSupermarket() {} public TestSupermarket(String brand,String name) { this.brand = brand; this.name = name; } //get、set public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getName() { return name; } public void setName(String name) { this.name = name; } //定义一个存储的方法 public synchronized void set(String brand,String name) { if (flag) { try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else { this.setBrand(brand); try { Thread.sleep(300); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.setName(name); System.out.println("=========生产者产生了:==========" + this.getBrand() + this.getName()); this.notify(); flag = true; } } //定义一个取值的方法 public synchronized void get() { if (flag) { System.out.println("消费者取走了:=============" + this.getBrand() + this.getName()); this.notify(); flag = false; }else { try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public class TestConsumer implements Runnable{ //功能属性 private TestSupermarket supermarket; //超市 //构造方法 public TestConsumer(TestSupermarket supermarket) { this.supermarket = supermarket; } //定义线程体 @Override public void run() { for (int i = 0;i<10;i++) { supermarket.get(); } } } public class Test { public static void main(String[] args) { //创建超市类 TestSupermarket sup = new TestSupermarket(); //创建生产者类 TestConsumer p = new TestConsumer(sup); //创建消费者类 TestProducer p2 = new TestProducer(sup); //创建代理角色线程类,并启动线程 new Thread(p).start(); new Thread(p2).start(); } }
老师为什么同步方法放在循环里面,那么这个线程就会一直执行,直到循环结束,另一个线程在执行
老师,是不是我那个地方写错了
package com.bjsxt.thread.prosumer2; /** * <p>Title: TestConsumer</p> * <p>Description: 消费者模式</p> * @author xiaoding * @date Jul 20, 2020 * @version 1.0 */ public class TestConsumer implements Runnable{ //功能属性 private TestSupermarket supermarket; //超市 //构造方法 public TestConsumer(TestSupermarket supermarket) { this.supermarket = supermarket; } //定义线程体 @Override public void run() { for (int i = 0;i<10;i++) { supermarket.getConsumer(); } } } package com.bjsxt.thread.prosumer2; /** * <p>Title: TestProducer</p> * <p>Description: 生产者模式</p> * @author xiaoding * @date Jul 20, 2020 * @version 1.0 */ public class TestProducer implements Runnable{ //功能属性 private TestSupermarket supermarket; //超市 //构造方法 public TestProducer(TestSupermarket supermarket) { this.supermarket = supermarket; } //定义线程体 @Override public void run() { for (int i = 0;i<10;i++) { if (i % 2 != 0) { supermarket.setProducer("旺仔","小馒头"); }else { supermarket.setProducer("康师傅","红烧牛肉面"); } } } } package com.bjsxt.thread.prosumer2; /** * <p>Title: TestSupermarket</p> * <p>Description: 超市(存储)</p> * @author xiaoding * @date Jul 20, 2020 * @version 1.0 */ public class TestSupermarket { // 功能属性 private String brand; //品牌 private String name; //名称 //构造方法 public TestSupermarket() {} public TestSupermarket(String brand,String name) { this.brand = brand; this.name = name; } //get、set public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getName() { return name; } public void setName(String name) { this.name = name; } //定义同步方法Producer public synchronized void setProducer(String brand,String name) { this.setBrand(brand); try { Thread.sleep(300); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.setName(name); System.out.println("生产者生产了:" + this.getBrand() + this.getName()); } public synchronized void getConsumer() { System.out.println("消费者消费了:" + this.getBrand() + this.getName()); } }
测试结果:
老师有第二阶段课程的讲义文档吗?有的话可以像第一阶段一样方便笔记
占用内存是负数为什么呢
老师,我的电脑为什么运行结果是Sun Dec 14 06:40:44 GMT+08:00 1969啊?
Date d2 = new Date(1000*3600*24*365*250); System.out.println(d2);
请问下,老师的可以在idea上的代码点击报错的FileRead展开FileRead类,我本地的无法点击打开,是需要怎么设置吗
package string; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class Test02 { public static void main(String[] args) { FileReader reader= null; try { reader = new FileReader("d:/a.txt"); char c =(char)reader.read(); char c2=(char)reader.read(); System.out.println(""+c+c2); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e){ e.printStackTrace(); } finally { try { if(reader!=null){ reader.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
为啥这里打印出来得顺序是{world=456, java=1000, hello=1000},而不是{world=456, hello=1000, java=1000}呢
这里的df调用的是DateFormat类的parse方法,返回的是result(这里相当于是把result的地址传递给a吧),而result在DateFormat的parse方法是这么表示的Date result = parse(source, pos)),此时的parse是Date的方法。然而我咋都没见到Date a和Date result的初始化呢?
老师第九行这种是什么赋值方式呢
老师我感觉同步方法的速度比同步代码块,要快
老师线程被锁住,其他线程访问不了当前线程,会不会进入阻塞状态
老师为什么我解析dom4j会有warring
老师,这里Date(1000L*3600*23)里面的式子没看懂
为什么算出来是1970-01-02 07:00:00
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637