看到这位同学跟老师的解答,产生了疑惑:
视频里的add方法当中有写:
所以key对应的value应该不是null ,而是一个一个的object类型的对象 new Object();
获取所有键与值和他们关系的时候把他们赋值给了 Set类 和Collection类对象 之前讲的collection和set类不是接口吗?接口不能new对象 但是可以这样定义变量是吗
如图所示,想问一下老师,看这位同学跟您给他的解答,产生了疑惑
服务器端:
package com.sxt.a1; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Test { public static void main(String[] args) throws IOException { System.out.println("=====服务器端已启动======="); //(1)创建ServerSocket对象 ServerSocket server = new ServerSocket(9999); //(2)监听是否有客户端发送请求连接 Socket client = server.accept(); //(3)获取输入流 InputStream is = client.getInputStream(); System.out.println((char)is.read()); //(4)获取输出流 OutputStream os = client.getOutputStream(); os.write("收到了".getBytes()); //(5)关闭流,关闭Socket if(os!=null) { os.close(); } if(is!=null) { is.close(); } if(client!=null) { client.close(); } } }
客户端:
package com.sxt.a2; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class Test { public static void main(String[] args) throws IOException { System.out.println("=========客户端============"); //(1)创建Socket对象 Socket client = new Socket("198.168.31.113",9999); //(2)获取输出流 OutputStream os = client.getOutputStream(); os.write('a'); //(3)获取输入流 InputStream is = client.getInputStream(); byte[] buf = new byte[1024];//中转站 int len = 0;//读到的字节的个数 while((len = is.read(buf))!=-1) { System.out.println(new String(buf,0,len)); } //(4)关闭流 if(is!=null) { is.close(); } if(os!=null) { client.close(); } } }
运行结果:
客户端
老师你好,我先启动的服务器端,然后启动客户端,都启动了,运行正常但是没有任何动静(消息传动),老师连接视频上连接都有:“收到了”和“a”的传送,我的过了一段时间客户端报异常了,是网络连接超时,为什么我的服务器端和客户端连接不上呢?
老师讲这源码根本听不懂 都不知道说啥呢
什么玩意一顿乱指
这个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的初始化呢?
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637