C#线程新手求助啊 C#线程问题 2C

class Program
{
static void Main(string[] args)
{

         Thread thread1 = new Thread(new ThreadStart(fun_thread1));            
         Thread thread2 = new Thread(new ThreadStart(fun_thread2));
         thread1.Start();
         thread2.Start();
     }
    static void fun_thread1()
     {
         for (int i = 1; i < 60;i++ )
         {
            Console.WriteLine( "  1");
            Thread.Sleep(30);
         }
     }
    static void fun_thread2()
     {
         for (int i = 1; i < 60;i++ )
         {
            Console.WriteLine( "  2");
            Thread.Sleep(30);
         }
     }

}
为什么运行出来的结果是1、2交替的啊??不应该是无序的吗???不知道是不是sleep和时间片的原因,把sleep去掉就是无序了,但是我需要让这两个进程隔一段时间执行一次而且要无序~~~
图片说明
新人求助啊!!!

6个回答

我记得sleep是指挂起线程一段时间,出让CPU,如果这么理解的话,两个线程利用sleep交替占用CPU也没什么不对啊~

Meditator_hkx
Meditator_hkx Java我印象中也是无序的,C#我不熟,不好意思了~
4 年多之前 回复
kfzxb
kfzxb 可是我不想他们交替执行,需要无序的,而且是每隔一段时间执行一次,有没有什么办法啊???(这段程序用JAVA写出来的结果是无序的,用C#是交替执行的~~~)
4 年多之前 回复

使两个sleep的时间不一样

kfzxb
kfzxb 把时间设成不一样,出来的结果还是有规律的~~~这不符合进程并发执行的随机性啊???
4 年多之前 回复

sleep(随机秒数即可实现你的要求)

lianshaohua
ztenv 回复kfzxb: 你的sleep让线程成为了基本有序执行的状态,如果真想测试无序,那么就把sleep时间改短,
4 年多之前 回复
kfzxb
kfzxb 其实我实际想验证的是:进程并发执行结果的随机性,为什么用了sleep之后就总是进程1比进程2先执行啊???不应该是无序的么(虽然sleep随机秒数也能达到效果,但不是我想验证的东西~~~)
4 年多之前 回复
kfzxb
kfzxb 其实我实际想验证的是:进程并发执行结果的随机性,为什么用了sleep之后就总是进程1比进程2先执行啊???不应该是无序的么(虽然sleep随机秒数也能达到效果,但不是我想验证的东西~~~)
4 年多之前 回复

是你的行为造成了打印出来的数据是有序的

sleep 都是30 改一下

是程序的问题还有就是sleep时间问题,先执行fun__thread1()是因为它先start的,而且和你当时的cpu活动状况有关,

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问