go.javamana.com

提问太多,导致页面显示加载缓慢,所以专门搞个页面来显示提问。。。
这是关于知识点: JAVA 高级-反射机制-获取类对象 的所有提问


问答区域    
2021-03-15 类对象
森大大

类对象的用处是什么







回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题, 请重新提问,否则站长有可能看不到




2021-02-05 不用synchronized会怎样
一叶秋梦

有没有synchronized运行起来没有什么区别啊?




2 个答案

fql
答案时间:2021-09-21
package JavaSeHigh.reflection; public class TestReflection_synchronized { } class TestReflection3 { public static void main(String[] args) throws InterruptedException { Thread t1= new Thread(){ public void run(){ //调用method1 TestReflection3.method1(); } }; t1.setName("第一个线程"); t1.start(); //保证第一个线程先调用method1 Thread.sleep(1000); Thread t2= new Thread(){ public void run(){ //调用method2 TestReflection3.method2(); } }; t2.setName("第二个线程"); t2.start(); Thread t3= new Thread(){ public void run(){ //调用method2 TestReflection3.method3(); } }; t3.setName("第三个线程调皮闯入"); t3.start(); } public static void method1() { synchronized (TestReflection3.class) { // 对于method1而言,同步对象是TestReflection3.class,只有占用TestReflection.class才可以执行到这里 System.out.println(Thread.currentThread().getName() + " 进入了method1方法"); try { System.out.println("运行15秒"); Thread.sleep(15000); System.out.println("method1方法结束"); } catch (InterruptedException e) { e.printStackTrace(); } } } public static synchronized void method2() { // 对于mehotd2而言,必然有个同步对象,通过观察发现,当某个线程在method1中,占用了TestReflection.class之后 // 就无法进入method2,推断出,method2的同步对象,就是TestReflection.class System.out.println(Thread.currentThread().getName() + " 进入了method2方法"); try { System.out.println("运行3秒"); Thread.sleep(3000); System.out.println("method2方法结束"); } catch (InterruptedException e) { e.printStackTrace(); } } public static void method3() { // 对于mehotd2而言,必然有个同步对象,通过观察发现,当某个线程在method1中,占用了TestReflection.class之后 // 就无法进入method2,推断出,method2的同步对象,就是TestReflection.class System.out.println(Thread.currentThread().getName() + " 进入了method3方法"); try { System.out.println("嘤嘤嘤~~~没加synchronized,我在这里捣乱3秒"); Thread.sleep(3000); System.out.println("method3方法结束,拜拜~"); } catch (InterruptedException e) { e.printStackTrace(); } } }

海心
答案时间:2021-03-03
你把method1睡眠时间改为20s 你再看看。再进一步 在sleep后分别加入System.out.println("method1结束"); System.out.println("method2结束"); 可以看到method2一定在method1执行完才开始执行。而method2没加synchronized时,method2在method1未完成前就执行。 --------------method2加synchronized时------------------------ 第一个线程 进入了method1方法 运行20秒 method1结束 第二个线程 进入了method2方法 运行5秒 method2结束 -------------------------------------------- --------------method2没加synchronized时------------------------ 第一个线程 进入了method1方法 运行20秒 第二个线程 进入了method2方法 运行5秒 method2结束 method1结束 --------------------------------------------



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题, 请重新提问,否则站长有可能看不到




2020-11-20 站长,这个侵犯了您的版权
2020-10-03 静态方法前加synchronized
2020-07-28 hero.getClass 和new hero().getClass 有什么不一样?
2020-07-25 这里说的静态方法是指静态代码块?还是被static修饰的方法?
2020-05-19 关于Class与Class?<?>
2020-03-15 这个答案没有积分了怎么查看啊??? 也没有地方可以买这个高级教程的呀
2020-01-29 在静态方法前面加synchronize,其同步对象是 当前类对象
2019-12-21 在静态方法前面加synchronize
2019-11-22 练习
2019-07-14 还是不太明白
2019-05-29 静态方法synchronized的锁是类对象
2018-08-06 zxc
2018-07-30 练习题中,为什么加入t1.join();后,t2才输出
2018-05-05 请问基本类型如int, float有类对象吗
2017-12-25 加包名 与不加 为什么类对象不一样
2017-12-09 练习的最后一个问题
2017-11-07 使用.class不会初始化Class对象
2017-08-28 如何获取同一个包的类对象
2017-07-04 dwre
2017-07-04 dgftryh
2016-06-30 .getName() 改成,name吧