请问老师,是否是因为字符串在常量池中创建后找得都是常量池这个对象的地址,我自己试了下如果对象锁不是同一个常量值那么还是会并行的
老师,请问下这样写的话比较麻烦吗
package com.bjsxt.线程同步; public class TestSyncThread { public static void main(String[] args) { Program p = new Program(); p.setName("Mokura"); Thread thread = new Thread(new Working(p)); Thread thread1 = new Thread(new Bought(p)); thread.start(); thread1.start(); System.out.println("主线程结束"); } } class Program { String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Program{" + "name='" + name + '\'' + '}'; } } class Working implements Runnable{ private Program program; public Working(Program p) { this.program = p; } @Override public void run() { synchronized (this.program){ try { System.out.println(program.getName() + "先去找工作"); Thread.sleep(1000); System.out.println(program.getName() + "辛苦工作一个月"); Thread.sleep(1000); System.out.println(program.getName() + "发工资啦!!!!"); Thread.sleep(1000); }catch (Exception e){e.printStackTrace();} } } } class Bought implements Runnable{ private Program program; public Bought(Program p) { this.program = p; } @Override public void run() { synchronized (this.program){ try { System.out.println(this.program.getName()+"去超市转了"); Thread.sleep(1000); System.out.println(this.program.getName()+"看中了2022-Bilibili春节限定花嫁手办"); Thread.sleep(1000); System.out.println("心满意足的回家了"); }catch (Exception e){e.printStackTrace();} } } }
老师,通过字节流转成字符流然后用处理流包装添加行号的方式和直接用字符流然后用处理流包装添加行号,这两者而言,是不是后者的效率更高呀?
老师,这里写的时候应该是写的int类型的,为什么写出来是字符呢?我打开jdk上面是这样写的,意思是会实现int转String吗?
这样就可以解决了
老师,一个汉字占两个字节,为什么我文本里面写汉字,read出来的int个数是汉字数的三倍?
老师,请问为什么上面的BufferedOutputStream将OutputStream包装了,后面PrintStream又将这个OutputStream单独包装了一次?再就是我打开BufferedOutputStream的底层源码,里面有部分方法含有sychronized关键字,是不是跟StringBuffer一样是线程安全,这样导致效率不太高,然后进行了重新包装?然后为什么又有的方法没有sychronized关键字呢?
老师,什么时候需要用到remove方法,什么时候不需要用到呀?我看在讲解的时候,两次循环都没有用到
这个位置应该不是TREEIFY_THRESHOIL每循环-1吧,我理解的是:每循环binCount+1,然后如果这个数字达到7加上链表首位,达到8,再去判断是否变树节点,是不是老师口误了?还是我理解错了?
请问老师,学生这样理解做的对不对
老师这样理解对吗
老师为什么会出现这种情况?
老师,这一部分上面的代码是什么?
如果继续用上一节课的代码运行出来跟视频上有一点点出入
public class TestThread extends Thread{ public TestThread(){ System.out.println(this.getName()); } /** * 线程的线程体 */ @Override public void run() { System.out.println(this.getName()+"线程开始"); for (int i=0;i<20;i++){ System.out.println(this.getName()+""+i); } System.out.println(this.getName()+"线程结束"); } public static void main(String[] args) { System.out.println("主线程开始"); //实例化线程 TestThread t1 =new TestThread(); TestThread t2 =new TestThread(); //启动线程 t1.start(); t2.start(); System.out.println("主线程结束"); } }
主线程开始
Thread-0
Thread-1
主线程结束
Thread-0线程开始
Thread-1线程开始
Thread-00
Thread-10
Thread-01
Thread-11
Thread-02
Thread-12
Thread-03
Thread-13
Thread-04
Thread-14
Thread-15
Thread-16
Thread-17
Thread-18
Thread-19
Thread-110
Thread-111
Thread-112
Thread-05
Thread-113
Thread-06
Thread-114
Thread-07
Thread-115
Thread-08
Thread-116
Thread-09
Thread-117
Thread-010
Thread-118
Thread-011
Thread-119
Thread-012
Thread-013
Thread-014
Thread-015
Thread-016
Thread-017
Thread-018
Thread-019
Thread-0线程结束
Thread-1线程结束
老师 为什么我输出的代码不是按顺序的,代码很乱 类似交替?是不是就是前面讲的时间片轮询算法
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637