什么是自然顺序?什么是自然顺序?什么是自然顺序?
老师,
HashMap hm=new HashMap();
hm.put("java",1000);
hm.put("java",2000);
在实际运行时键重复的话,值会被覆盖。但是该课程中讲的是, 在链表上挨个比较key对象, 调用equals()方法,如果内容相同不添加。但是实际运行是覆盖,请问怎么解释呢?
老师,视频中存储的是integer类型的数字。我比较疑惑的是HashMap在添加元素的时候是需要键和值,那调用hashcode()和equals()方法是键的呢还是值得呢?
比如:HashMap hm=new HashMap();
那么存储元素时调用的是“java”的String类的hashcode()和equals()方法呢?还是1000的integer类的hashcode()和equals()方法呢?
打印出来为什么是字母隔断两个呢?逻辑有问题?
Printer:
package cn.sxt.thread; public class Printer { private int index=1; public synchronized void print(int number) throws InterruptedException{ if(index%3==0){ super.wait(); }else{ System.out.println(number); super.notifyAll(); index++; } } public synchronized void print(char ch) throws InterruptedException{ if(index%3!=0){ super.wait(); }else{ System.out.println(ch); super.notifyAll(); index++; } } }
CharPrinter:
package cn.sxt.thread; public class CharPrinter implements Runnable { private Printer printer; public CharPrinter(Printer printer){ this.printer=printer; } @Override public void run() { for(char i='A';i<='Z';i++){ try { printer.print(i); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
NumberPrinter :
package cn.sxt.thread; public class NumberPrinter implements Runnable { private Printer printer; public NumberPrinter(Printer printer){ this.printer=printer; } @Override public void run() { for(int i=1;i<=52;i++){ try { printer.print(i); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
TestThread
package cn.sxt.thread; public class TestThread { public static void main(String[] args){ Printer p = new Printer(); NumberPrinter np = new NumberPrinter(p); CharPrinter cp = new CharPrinter(p); Thread t1 = new Thread(np); Thread t2 = new Thread(cp); t1.start(); t2.start(); } }
MyNewThread.rar
这里的Node对象就2个属性吗,一个是自身的值,一个是下一个节点的地址。这里的链表是单向链表吗,value存在哪里?
你讲的是key的存储,value存在哪呢?
——————————————————
老师,我导入本章源码后,出现错误提示
错误影响:text2.java文件在项目里找不到,必须手动的粘贴到项目里
new Date().getTime 和 System.currentTimeMillis()为什么打印出来的数值不一样,这两者有什么区别?
如果把打印Date对象放后边,new Date().getTime 和 System.currentTimeMillis()的数值就是一样的了
视频中老师打印的日期时间是GMT
自己打印的时间是CST
这和什么有关系?
//客户端 package com.jingdong.www; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class Test1 { public static void main(String[] args) throws Exception{ System.out.println("客服端启动了"); Socket client=new Socket("127.0.0.1",9999); //获得输出流 OutputStream os=client.getOutputStream(); os.write("你在吗".getBytes()); //获得输入流 InputStream is=client.getInputStream(); byte[] flush=new byte[1024]; int len=0; while((len=is.read(flush))!=-1) { System.out.println(new String (flush,0,len)); } //关闭 if(is!=null) { is.close(); } if(os!=null) { os.close(); } if(client!=null) { client.close(); } } }
服务器端 package com.jingdong.www; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Test1 { public static void main(String[] args) throws Exception { System.out.println("服务器启动了——————————————"); //创建服务器对象 ServerSocket server=new ServerSocket(9999); //监听 Socket client=server.accept(); //获得输入流 InputStream is=client.getInputStream(); byte[] flush=new byte[1024]; int len=0; while((len=is.read(flush))!=-1) { System.out.println(new String (flush,0,len)); } //获得输出流 OutputStream os=client.getOutputStream(); os.write("收到了!".getBytes()); //关闭 if(os!=null) { os.close(); } if(is!=null) { is.close(); } if(client!=null) { client.close(); } } }
老师,客服端发消息正常,服务器收消息正常,服务器发消息正常
但是客户端收不到服务器端的消息。
同步之后,一个窗口在买票,其它两个窗口必须等待,那效率和一个窗口有什么区别?窗口虽然有三个,但同一时间还不是只能卖掉一张票。
老师,我视频中的运行结果只是出现了负数,而我的出现了重复?(代码是老师的代码)
C窗口正在卖第4张票
B窗口正在卖第3张票
A窗口正在卖第5张票
C窗口正在卖第2张票
A窗口正在卖第2张票
B窗口正在卖第2张票
A窗口正在卖第1张票
C窗口正在卖第1张票
B窗口正在卖第0张票
——————————————————————
视频中说,数据错乱的原因在于,
B窗口和C窗口判断a>0,成立后,时间片到了,给其他资源。
下次获得时间片后,从断掉的开始执行,才导致出现负数。
问题:
老师,为什么?
b的时间片断后,不是另一个线程从断的地方继续执行。而是下次获得时间片后,由本线程继续从断的地方执行?
之前不是说线程之间共享代码吗?
________________________________________________
老师,如果时间片控制线程的执行时间,那么我怎么控制时间片是多少呢?
老师好,这里的flush()方法是强制刷新缓冲区,如果末尾有了关闭的步骤是不是用不到这个方法了
如果用到的话是不是放在循环结束后用比较好呢
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637