永发信息网

java线程里面方法的执行顺序

答案:4  悬赏:40  手机版
解决时间 2021-02-16 02:36
java线程里面方法的执行顺序
最佳答案
这个程序的执行顺序不不一定的,它的执行顺序还跟线程分的时间片有关
  CPU运算的时间 是分时间片 分给不同的线程的 一个线程执行完 或者用完了当前它分到的那个时间片 他就得让出CPU给其他线程使用啦!
  线程化是允许多个活动共存于一个进程中的工具。大多数现代的操作系统都支持线程,而且线程的概念以各种形式已存在了好多年。Java 是第一个在语言本身中显式地包含线程的主流编程语言,它没有把线程化看作是底层操作系统的工具。
  有时候,线程也称作轻量级进程。就象进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与分隔的进程相比,进程中的线程之间的隔离程度要小。它们共享内存、文件句柄和其它每个进程应有的状态。
  进程可以支持多个线程,它们看似同时执行,但互相之间并不同步。一个进程中的多个线程共享相同的内存地址空间,这就意味着它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。尽管这让线程之间共享信息变得更容易,但您必须小心,确保它们不会妨碍同一进程里的其它线程。
  Java 线程工具和 API 看似简单。但是,编写有效使用线程的复杂程序并不十分容易。因为有多个线程共存在相同的内存空间中并共享相同的变量,所以您必须小心,确保您的线程不会互相干扰。
  每个 Java 程序都使用线程
  每个 Java 程序都至少有一个线程 ― 主线程。当一个 Java 程序启动时,JVM 会创建主线程,并在该线程中调用程序的 main() 方法。
  JVM 还创建了其它线程,您通常都看不到它们 ― 例如,与垃圾收集、对象终止和其它 JVM 内务处理任务相关的线程。其它工具也创建线程,如 AWT(抽象窗口工具箱(Abstract Windowing Toolkit))或 Swing UI 工具箱、servlet 容器、应用程序服务器和 RMI(远程方法调用(Remote Method Invocation))。
全部回答
你的顺序是不对的吧!执行顺序是:main->m2->run->m1
你搞笑吧,主线程都没运行,其他两线程能运行吗?追问如果主线程先运行,你说System.out.println(x.b+"uuuuuuu");
,这一句结果是什么?

从输出结果来看呢,确实是m2-->main-->m1,


但是Thread.start(),此时线程处于就绪状态,并没有立即运行,


而是先运行Main线程(主线程),当主线程挂起的时候,Thread线程才开始运行,但是运行主线程的时候M2()方法已经把变量b锁住了,所以先运行M2()方法,如果不把M2()加锁的话,应该先运行M1()方法的。package test;
public class problem10 implements Runnable {
int b = 10;

@Override
public void run() {
// TODO Auto-generated method stub
try {
m1();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public synchronized void m1() throws Exception
{
b = 1000;
Thread.sleep(1000);
System.out.println("M1 b="+b);
}

public  void m2() throws Exception
{
Thread.sleep(5000);
b = 2000;
System.out.println("M2 b="+b);
}

public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
problem10 prob = new problem10();
System.out.println("prob.b 1 = "+ prob.b);
Thread t = new Thread(prob);
t.start();
System.out.println("prob.b 2 = "+ prob.b);
prob.m2();
System.out.println("prob.b 3 = "+ prob.b);
}

}
执行结果如下
prob.b 1 = 10
prob.b 2 = 10
M1 b=1000
M2 b=2000
prob.b 3 = 2000


希望你能明白。追问我发现,我有点放迷糊了额 ,不确定m1先,还是m2先,因为这一句 System.out.println(x.b+"uuuuuuu");
运行多次,会发现结果不一样,这好像推翻了m2先的说法
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
太平天国的天京变乱时,东王杨秀清手中握有多
小学六年级应用题140到 急需快开学了什么原
卡罗琴行这个地址在什么地方,我要处理点事
我姐姐刚刚生了个女儿,麻烦大家帮忙想个名字
淮阳县周口云南过桥米线地址有谁知道?有点事
买毛坯房好还是已装潢的二手房好
最近不知怎么了 怀疑自己是不是患有精神疾病
四柱十二长生
榆三线地址在什么地方,想过去办事
濮阳县濮阳易捷便利店(黄河路)地址在什么地方
九城和网易(WOW)的账号问题
治字辈 如何取名
颞区颞叶意思一样吗
肇州县大庆肇州县乔阳艺术培训学校哪位知道具
一个单人旁一个心是什么字
推荐资讯
在医学上MR是什么意思
火命人适合干家具行业吗
请问无锡泥人博物馆怎么去啊
我前几天感冒晚上呕吐后喉咙不舒服,咳嗽肚子
洞口县邵阳雪峰人家地址有谁知道?有点事想过
侨庭社区残疾人协会地址在哪,我要去那里办事
男生长度多少的头发可以拉直
形容人畏缩怕事的成语
仙景阿冰辣盐鸡饭店在什么地方啊,我要过去处
鄢陵县许昌得时康绿色干洗(陈店分店)地址是什
免疫系统越强越好?
如何从触摸屏给定频率给变频器
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?