请各位帮我分析一下这到多线程的问题,很难理解啊!!! 因为多线程的程序并不能保证每个线程占用CPU资源的优先权,即使设定了优先权,也不能完全保证。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1. 你的public void piggy(String sName)中将代入的sName指向新的字符串,本身的sName字符串并没有变,也就是说在run()中用的字符串还是原来的"vandeleur". 你是不是搞错了,用public void piggy()情况就不一样了.2. 当在piggy()调用start()后,就产生了一个新的线程,新的线程做FOR循环和主线程打印是两个不同的线程,具体先执行哪个是不定的.但是要看效果,需要加上延时,那时结果就不定了. 是啊,如果都不加延时,一般System.out.println(sName);在run()之前运行,所以是vandeleur。这道题目的出题目的还是很明确的,可以分别在main()函数和for()里加上不同的延时体会一下。(菜鸟之言) 谢谢上面各位网友的解答,我对这到题目是不是可以这样理解,在Java中参数是传递值的,public void piggy(String sName)方法中的sName其实是这个方法的局部变量,方法中对这个sName局部变量的修改不会影响到程序的全局变量sName。所以在main程序中的System.out.println(sName)一个可能性就是打印出了vandeleur。而在多线程的run方法中由于没有使用局部变量,它其中的变量sName应该就是程序声名的全局变量,run方法中对sName变量的修改会影响到System.out.println(sName)的打印结果。另外由于调用了start方法后,并不能保证线程可以马上运行,也有可能这个线程由于没有获得cpu的资源而没有运行,所以程序的线程可能不被运行。但是奇怪的是,线程要么得以运行,要么可能不被运行,除此之外可能在运行run方法中途停止的吗?好象应该不可能的把!那么这第四个答案也应该是不正确的。正确的答案应该是"vandeleur" or "vandaleur 0 1 2 3"各位你们看我这样的理解对吗?谢谢各为了,解决了马上给分!!! 你理解了宏观的线程,微观上Main的线程和Run的线程也是分时间片来获取Cup资源的,有的时候Main连续获得Cup(因为你的线程优先度一样)所以结果不确定,你可以用不同的优先度和利己线程试一下! 其实一个考虑的是String的调用,因为 wiggy是怎么都不可能加进去而线程执行的时候和System.out.println这条语句都在竞争sName这个资源,所以理所当让会出现上面4种情况 还是没能理解!“而线程执行的时候和System.out.println这条语句都在竞争sName这个资源,”但是一个线程开始于run方法,结束于run方法,我感到疑惑的是,在run方法中的for循环能中途退出吗?怎么说也应该0,1,2,3一起打印出来呀!能解释一下为什么是这样的吗?谢谢了! C:\>f:F:\>cd workF:\work>javac Tux.javaF:\work>java TuxvandeleurF:\work>java TuxvandeleurF:\work>javac Tux.javaF:\work>java TuxvandeleurF:\work>javac Tux.javaF:\work>java TuxvandeleurF:\work>我想那才是答案 “而线程执行的时候和System.out.println这条语句都在竞争sName这个资源,”但是一个线程开始于run方法,结束于run方法,我感到疑惑的是,在run方法中的for循环能中途退出吗?怎么说也应该0,1,2,3一起打印出来呀!能解释一下为什么是这样的吗?谢谢了!=====>你要注意,你调用的是start()方法,该方法会生成一个新的线程并执行run()方法,start()生成新的线程并调用run()后,不管该run()方法是否结束,它都会继续原来的进程(或线程). 在你的例子中,也就是在运行run()的同时可能System.out.println这条语句也在运行,结果就... 我知道了,是不是应该这样来理解,由于主线程和用start()方法起用的线程是同时运行的,而在主线程中的System.out.println(sName)可能在用start()方法起用的线程还没有运行完毕,但已经在这个线程运行结束前调用了,所以在线程运行中修改的变量结果可能会影响打印的结果。所以可能会出现答案中的四个结果。这样的理解应该对的把!!! excel 求和 请教JAVA中的正则表达式的使用 问一下java套打(卫生许可证之类)的问题 求一个日期的算法 100分,简单问题:日期计算问题请教!! 请教,关于jtree的问题!!!!谢了 我是个VB程序员,现在想写JAVA,但不知道怎么学,给点意见,那写书比较适合我! 非常怪异的double相加,难道这是Sun java的一个bug?但愿不是,谁知道,这200分就给您了 鸭子也要飞 如何控制子目录及文件的数量 大家好!!用java开发数据库!!请帮忙!! 请问java thread 中的monitor是什么东西?多谢
public void piggy(String sName)方法中的sName其实是这个方法的局部变量,方法中对这个sName局部变量的修改不会影响到程序的全局变量sName。所以在main程序中的System.out.println(sName)一个可能性就是打印出了vandeleur。而在多线程的run方法中由于没有使用局部变量,它其中的变量sName应该就是程序声名的全局变量,run方法中对sName变量的修改会影响到System.out.println(sName)的打印结果。另外由于调用了start方法后,并不能保证线程可以马上运行,也有可能这个线程由于没有获得cpu的资源而没有运行,所以程序的线程可能不被运行。
但是奇怪的是,线程要么得以运行,要么可能不被运行,除此之外可能在运行run方法中途停止的吗?好象应该不可能的把!那么这第四个答案也应该是不正确的。正确的答案应该是"vandeleur" or "vandaleur 0 1 2 3"
各位你们看我这样的理解对吗?谢谢各为了,解决了马上给分!!!
而线程执行的时候和System.out.println这条语句都在竞争sName这个资源,所以理所当让会出现上面4种情况
“而线程执行的时候和System.out.println这条语句都在竞争sName这个资源,”但是一个线程开始于run方法,结束于run方法,我感到疑惑的是,在run方法中的for循环能中途退出吗?怎么说也应该0,1,2,3一起打印出来呀!能解释一下为什么是这样的吗?谢谢了!
vandeleurF:\work>java Tux
vandeleurF:\work>javac Tux.javaF:\work>java Tux
vandeleurF:\work>javac Tux.javaF:\work>java Tux
vandeleurF:\work>我想那才是答案
=====>
你要注意,你调用的是start()方法,该方法会生成一个新的线程并执行run()方法,start()生成新的线程并调用run()后,不管该run()方法是否结束,它都会继续原来的进程(或线程). 在你的例子中,也就是在运行run()的同时可能System.out.println这条语句也在运行,结果就...