public class Threadtest2 {

public static void main(String[] args) {
Tsleep1 T1= new Tsleep1();
Tsleep2 T2= new Tsleep2();
T1.start();
T2.start();
}

}

class Tsleep1 extends Thread{

展开全部
收起
4回答
提交回答
  • 至过去的我

    2044人对此回答表示赞同

    我是未来的你,你现在是不是在年找寻小程序答案。你不要感觉诧异,给你来信原因,就是让你不在后悔。今天去学习如何推广小程序,相信......点击查看更多>
    发布于
  • Maja

    16人对此回答表示赞同

    cpu执行线程是按照时间片执行的,

    轮到Thread1执行 ------ 0

    轮到Thread2执行 ------ This is 0 ;

    轮到Thread1执行,在一秒的时候cpu把时间片给Thread2,Thread1没有输出0,Thread2获得时间片输出,This is 1,就会出现不想发生的情况。

    。。。

    避免情况,加锁:
    加锁作用是不执行完毕本线程,不把时间片交给其他线程。
    展开
    16
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • 相亲相爱

    11人对此回答表示赞同

    你这是调用的线程 线程的时间片不是你控制的 并不一定是Tsleep1执行一次Tsleep2执行一次,Tsleep1和Tsleep2是打乱顺序执行的,你每次运行的结果都肯能不一样。 二楼正解
    展开
    11
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • 扑朔迷离

    10人对此回答表示赞同

    1L说的理论才是正确的,2L说的东西也是对的,但是2L说的和你现在出现的这个错误无关,我想1个时间片对于这个程序来说,是绝对可以把几行代码执行完的,从CPU指令的时间上也可以推出来。从上面可以非常明显的看出来,关键是第一次输出的问题,其实你的多线程代码问题很多,但是在你这个程序里表现不出来。

    为了解释一些东西,先解释一些概念。其实你说这个问题如果往深处说就复杂了,只能简单的去说

    时间片:CPU对线程的执行,是通过分配时间片来实现的,即每个线程每次运行都有一个时
    展开
    10
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • Kelly小云鹅

    6人对此回答表示赞同

    在你的这个程序里面线程启动的顺序,并不一定是线程的执行顺,线程的执行次序和是否被打断不由程序控制,所以会出现这种情况。
    你可以给线程设置优先级试试
    展开
    6
    0回复
    发布于 6年前

    评论(0)

    收起评论

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
咨询热线

13312967497

扫码添加业务即可随时咨询 还可领取小程序推广攻略

业务咨询: 13312967497
扫码咨询

扫码咨询套餐

回到顶部