JAVA程序分析

JAVA程序分析,第1张

1.输出的结果是:max=22.得到最大值,方法改一下public static int max(int value1,int value2,int max){

if(value1>value2)

max=value1 return max

}public static void main(String args[ ]){

int max=max(1,2,max)

System.out.println("max="+max)

}

e2=new Employee("张山",30,3800)

创建了一个叫e2的实体对象,所以

e2.name = "张三"

e2.age = 30

e2.wage = 3800

e1.NO和e2.NO是一样的,NO是一个静态的变量,他是属于Employee类的,不属于某个具体的对象。e1.NO = e2.NO = 2

NO可以通过类名引用 Employee.NO

但age不能通过类名引用

楼主你可以多执行几遍再看看效果,第二行是变化的有时1000uuuuuuu有时2000uuuuuuu。

x.m2()执行后,主线程就应该顺序执行下去,同时它释放了锁,线程t得已继续执行,主线程和线程t是并行执行的。学过 *** 作系统这么课程你就应该知道,CPU是怎么执行多线程的了,它是划分成许多时间片,一个时间片执行一个线程并且一个CPU在某一时刻只能执行一个线程,再根据一定的作业调度算法来调度当前应该执行哪个线程,如果在这个时间片这个线程作业没完成,那么就会在下一次获得时间片时继续执行,由于CPU的计算速度相当快,给人的感觉是所有的任务都是同时执行的。

所以在这里,就有一个关键点,就是m2执行完后那一刻,是哪一个线程先获得当前CPU的时间片,谁先获得就是谁先执行,那么第二行的输出结果其实是个变化的结果,可能是你测试的次数少没有发现这一点。

Thread currentThread=Thread.currentThread()

currentThread.setPriority(10)

t.setPriority(1)

这样将主线程的优先级设置成最高,t线程设置成最低,那么测试绝大多数结果第二行都是2000uuuuuuu了,反之依然。其实这样都还是不能完全保证一定是哪个线程先执行的,只是优先级越高获得时间片的机会就越大。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7754071.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-09
下一篇2023-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存