老师那里有问题呀
想问下一定要调用FileOutputStream的flush()方法吗,没有写这个方法的时候程序也正常运行了。
老师,为什么在放馒头的同步方法里,用notify()唤醒的是取馒头的线程呢?
截屏2021-09-03 下午3.51.45.png
同楼上,一样的报错,不知原因
通过socket的顺序,和之前将的TCP的三次握手有什么区别?
这里是从服务器ServerSocket开始创建。
但是在讲TCP建立连接的三次握手时,有说的是从客户端发送TCP保文。
为什么这两个开始是从不同的方向?这两个的作用有什么区别?
老师,在添加序列化编码时,鼠标放在类名这出现指示,有两个序列化编码提示,而且添加的编码不同,我是该选哪一个?
老师为什么我写入的数据的内容超过四个字,在文件里显示的就是乱码
文本的格式我也设置gbk了,难道内容容量需要设置吗?
package com.bjsxt.dead; public class DeadLock extends Thread{ private Object money; private Object water; public boolean flag;//标识持有对象锁 public DeadLock(Object money, Object water) { super(); this.money = money; this.water = water; } @Override public void run() { if(flag) { synchronized (money) { System.out.println("有钱,等水"); try { Thread.sleep(300); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } synchronized (water) { System.out.println("有水,等钱"); } } }else { synchronized(water) { System.out.println("有水,等钱"); try { Thread.sleep(300); }catch (Exception e) { // TODO: handle exception e.printStackTrace(); } }synchronized (money) { System.out.println("有钱,等水"); } } } public static void main(String[] args) { Object money=new Object(); Object water=new Object(); DeadLock d1=new DeadLock(money, water); DeadLock d2=new DeadLock(money, water); d1.flag=true; d2.flag=false; d1.start(); d2.start(); } }
老师我这个嵌套的,应该会产生死锁,怎么还会打出后面的三四句
Test3 { main(String[] args) { List list = ArrayList<>(); list.add(); list.add(); list.add(); list.add(); list.sort((o1,o2) -> o1.compareTo(o2)); } } }
为什么compareTo报红
老师我这里为何会报异常,请老师帮忙看看谢谢,学到这,我有点迷糊了,有点听不懂了
package com.bjsxt.server; import java.util.List; import java.util.Map; import org.dom4j.Element; import com.bjsxt.servelet.Servlet; /** * 编写WebApp类 * @author ADMIN *(1)初始化程序运行的数据 *(2)根据不同的url创建所请求的Servlet对象 */ public class WebApp {//App的意思就是应用程序 private static ServletContext contxt; //使用静态块初始化Servlet容器 static{ contxt=new ServletContext(); //分别获取对应关系的Map集合 Map<String,String>servlet=contxt.getServlet(); Map<String,String>mapping=contxt.getMapping(); //创建解析XML文件的对象 webDom4j web=new webDom4j(); web.parse(web.getDocument());//解析xml //获取解析XML之后的List集合 List<Entity>entityList=web.getEntityList(); List<Mapping>mappingList=web.getMappingList(); //将List集合中的数据存储到Map集合中去 for (Entity entity : entityList) { servlet.put(entity.getName(), entity.getClazz()); } //System.out.println(servlet); for(Mapping map:mappingList){ //遍历url-pattern的集合 List<String>urlPattern=map.getUrlPattern(); for(String s:urlPattern ){ mapping.put(s, map.getName()); } } //System.out.println(mapping); } /** * 根据url创建不同的Servlet对象 * @param url * @return */ public static Servlet getServlet(String url){ if(url==null||url.trim().equals("")){ return null; } //调用无参构造方法创建Servlet对象 try { //如果url正确 //根据url的key获取Servlet -name的值/log=login, /reg=register String servletName=contxt.getMapping().get(url); //根据servletName得到对应的servlet-class String servletClass=contxt.getServlet().get(servletName);//得到的是一个完整的包名+类名的字符串 //使用反射创建Servlet对象 Class<?>clazz=Class.forName(servletClass); Servlet servlet = (Servlet) clazz.newInstance(); return servlet; } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static void main(String[] args) { System.out.println(getServlet("/log")); } }
划红线的地方为什么可以这么用 怎么来的 可以解释一下吗
class ManTou { private int id; public ManTou(int id) { this.id = id; } public int getId() { return this.id; } } /** * 定义缓冲区类 */ class SyncStack { //定义存放馒头的盒子 private ManTou[] manTous = new ManTou[10]; //定义操作盒子的索引 private int index; /** * 放馒头的方法 */ public synchronized void put(ManTou manTou) { //判断盒子是否已满 while (this.index == this.manTous.length) { try { this.wait(); //wait()必须在synchronized块中调用 wait()执行后 线程会将持有的对象锁释放 并进入阻塞状态 其他需要该对象锁的线程就可以继续运行了 } catch (InterruptedException e) { e.printStackTrace(); } } //唤醒取馒头的线程 this.notify(); //该方法必须在synchronized块中调用 会唤醒处于等待状态队列中的一个线程 this.manTous[this.index] = manTou; this.index++; } /** * 取馒头的方法 */ public synchronized ManTou get() { //判断盒子是否已空 while (this.index == 0) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); this.index--; return this.manTous[this.index]; } } /** * 定义生产者线程类 */ class ShengChan extends Thread { private SyncStack syncStack; public ShengChan(SyncStack syncStack) { this.syncStack = syncStack; } @Override public void run() { for (int i = 0; i < 10; i++) { ManTou manTou = new ManTou(i); syncStack.put(manTou); System.out.println("生产第"+(i+1)+"个馒头"); } } } /** * 定义消费者线程类 */ class Xiaofei extends Thread { private SyncStack syncStack; public Xiaofei(SyncStack syncStack) { this.syncStack = syncStack; } @Override public void run() { for (int i = 0; i < 10; i++) { ManTou manTou = this.syncStack.get(); System.out.println("消费了" + (i+1) + "个馒头"); } } } public class ProduceThread { public static void main(String[] args) { SyncStack syncStack = new SyncStack(); new ShengChan(syncStack).start(); new Xiaofei(syncStack).start(); } }
老师为什么我这里会出现先消费的现象啊?
老师,IDE中,什么快捷键是可以修改一个变量,然后下面所有同名变量都会跟着变得?
还有,调用一个方法是,什么快捷键是直接给方法添加一个返回值?List.get()--------->node = List().get()?
老师你好,我问你下,为什么我这个一直报closed的故障,而且服务端一直打印null
实操里的问题,这里为什么为什么不允许设置id,如果我把id的属性和值删除schema就验证成功
<?xml version="1.0" encoding="UTF-8"?> <employees xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="{employee.xsd}"> <employee id="1001"> <eno>1001</eno> <ename>高淇</ename> <age>18</age> <job>程序员</job> <salary>30000</salary> <subsidies>5000</subsidies> </employee> <employee id="1002"> <eno>1001</eno> <ename>高小二</ename> <age>19</age> <job>讲师</job> <salary>35000</salary> <subsidies>2000</subsidies> </employee> <employee id="1003"> <eno>1001</eno> <ename>高小松</ename> <age>20</age> <job>教授</job> <salary>20000</salary> <subsidies>3000</subsidies> </employee> </employees>
删除后:
<?xml version="1.0" encoding="UTF-8"?> <employees xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="{employee.xsd}"> <employee> <eno>1001</eno> <ename>高淇</ename> <age>18</age> <job>程序员</job> <salary>30000</salary> <subsidies>5000</subsidies> </employee> <employee> <eno>1001</eno> <ename>高小二</ename> <age>19</age> <job>讲师</job> <salary>35000</salary> <subsidies>2000</subsidies> </employee> <employee> <eno>1001</eno> <ename>高小松</ename> <age>20</age> <job>教授</job> <salary>20000</salary> <subsidies>3000</subsidies> </employee> </employees>
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637