写了一个程序结果出现了意料之外的结果。用手机发的 格式很乱大家不要介意 抱歉的
[code=Java] package org.cc.demo.Thread;class Tes implements Runnable{private boolean flag=true;private int i;public void run(){while(flag){{System.out.println(Thread.currentThread().getName()+"运行了:"+(i++)+"次");try{Thread.sleep(2000);}catch(Exception e){e.printStackTrace();}}}} public void stop(){ this.flag=false; System.out.println(Thread.currentThread().getName()+"线程停止"); }}public class Test {/** * @param args */public static void main(String[] args) { Tes t=new Tes(); new Thread(t,"线程1").start(); try{ Thread.sleep(5000); }catch(Exception e){ e.printStackTrace(); } new Thread(t,"线程2").start(); new Thread(t,"线程3").start(); new Thread(new Tes(),"线程X").start(); t.stop(); }}/*线程1运行了:0次线程1运行了:1次线程1运行了:2次线程2运行了:3次main线程停止线程X运行了:0次线程X运行了:1次线程X运行了:2次线程X运行了:3次线程X运行了:4次线程X运行了:5次线程X运行了:6次线程X运行了:7次线程X运行了:8次线程X运行了:9次线程X运行了:10次线程X运行了:11次*/ /[code]
这个是我无聊用来做测试的 为什么 输出的会是main停止 而不是其他的?
[code=Java] package org.cc.demo.Thread;class Tes implements Runnable{private boolean flag=true;private int i;public void run(){while(flag){{System.out.println(Thread.currentThread().getName()+"运行了:"+(i++)+"次");try{Thread.sleep(2000);}catch(Exception e){e.printStackTrace();}}}} public void stop(){ this.flag=false; System.out.println(Thread.currentThread().getName()+"线程停止"); }}public class Test {/** * @param args */public static void main(String[] args) { Tes t=new Tes(); new Thread(t,"线程1").start(); try{ Thread.sleep(5000); }catch(Exception e){ e.printStackTrace(); } new Thread(t,"线程2").start(); new Thread(t,"线程3").start(); new Thread(new Tes(),"线程X").start(); t.stop(); }}/*线程1运行了:0次线程1运行了:1次线程1运行了:2次线程2运行了:3次main线程停止线程X运行了:0次线程X运行了:1次线程X运行了:2次线程X运行了:3次线程X运行了:4次线程X运行了:5次线程X运行了:6次线程X运行了:7次线程X运行了:8次线程X运行了:9次线程X运行了:10次线程X运行了:11次*/ /[code]
这个是我无聊用来做测试的 为什么 输出的会是main停止 而不是其他的?
解决方案 »
- (在线等,急急急!)关于JTextPane实现撤消功能的问题
- 怎么打开.chm.download
- 一个关于java 线程锁的疑问
- 为什么我在eclipse里面运行程序图片可以看见。在命令行或者是打成Jar包的情况下却是空白一片得?
- JTextArea的换行问题
- 为什么我把class文件都用jar.exe打包成jar文件,双击文件但不能运行?
- Exception in thread "main" java.lang.NoSuchmethodError:main这是什么错?
- 核心技术2上的例4-1,我怎么也不能用示例程序连接上pointbase数据库,
- 往jbuilder里加文件的问题?怎么找不到类?
- java 动态代理出错,求指教
- 关于static内存分配
- HttpsConnection能不能设置收包长度?
ps:这代码谁看得进去谁是神
class Tes implements Runnable{
private boolean flag=true;
private int i;
public void run(){
while(flag){
{System.out.println(Thread.currentThread().getName()+"运行了:"+(i++)+"次");
try{Thread.sleep(2000);}
catch(Exception e){e.printStackTrace();}}}}
public void stop(){ this.flag=false; System.out.println(Thread.currentThread().getName()+"线程停止"); }}public class Test
{/** * @param args */public static void main(String[] args) {
Tes t=new Tes();
new Thread(t,"线程1").start();
try{ Thread.sleep(5000);
}catch(Exception e){
e.printStackTrace(); }
new Thread(t,"线程2").start();
new Thread(t,"线程3").start();
new Thread(new Tes(),"线程X").start();
t.stop(); }}
/*线程1运行了:0次线程1运行了:1次线程1运行了:2次线程2运行了:3次main线程停止线程X运行了:0次线程X运行了:1次线程X运行了:2次线程X运行了:3次线程X运行了:4次线程X运行了:5次线程X运行了:6次线程X运行了:7次线程X运行了:8次线程X运行了:9次线程X运行了:10次线程X运行了:11次*/
为什么显示的是main线程终止?
大哥们 我是用手机打成txt 然后复杂过来发现回车都没了 计算机学院大一不准拿电脑 你叫我学java的来问个问题多累呢。我尽量打回车带来不便抱歉了
...
public void run(){
while(flag){
{
System.out.println(Thread.currentThread().getName()+"运行了:"+(i++)+"次");
try{
Thread.sleep(2000);
}catch(Exception e){
e.printStackTrace();
}
}
}
stop(); //当前进程结束
}
...
或者 或者````
还是你的 问题 是为啥 x 线程 一直运行吧`???
你可以看看 Tes t --> 是在 main线程 中创建的 main 结束 释放所有资源 t 的引用就消失了! 而 x 是不是在 main 中的 new的 所以么 仅仅剩下 x 线程了```\(^o^)/~ 希望对你有用
new Thread(t,"线程2").start();
new Thread(t,"线程3").start();
new Thread(new Tes(),"线程X").start();
t.stop(); //这是在main方法里调用的,也就是main线程调用的,所以显示的main线程的名字
你如果把stop方法放到线程的run里去调用,那就会显示该线程的名字了
Thread.currentThread()表示当前线程,哪个线程调用此方法,就获得哪个线程对象
lass Test implements Runnable{
//写了一个程序结果出现了意料之外的结果。用手机发的 格式很乱大家不要介意 抱歉的
private boolean flag=true;
private int i;
public void run(){
while(flag){
{
System.out.println(Thread.currentThread().getName()+"运行了:"+(i++)+"次");
stop();//把stop()方法在这里调用看看 try{
Thread.sleep(2000);
}catch(Exception e){
e.printStackTrace();
}
}
}
}
public void stop(){
this.flag=false;
System.out.println(Thread.currentThread().getName()+"线程停止");
}
}
public class Tst {
/** * @param args */
public static void main(String[] args) {
Test t=new Test();
new Thread(t,"线程1").start();
try{
Thread.sleep(5000);
}catch(Exception e){
e.printStackTrace();
}
new Thread(t,"线程2").start();
new Thread(t,"线程3").start();
new Thread(new Test(),"线程X").start();
t.stop();
}
//线程1运行了:0次线程1运行了:1次线程1运行了:2次线程2运行了:3次main线程停止线程X运行了:0次线程X运行了:1次线程X运行了:2次线程X运行了:3次线程X运行了:4次线程X运行了:5次线程X运行了:6次线程X运行了:7次线程X运行了:8次线程X运行了:9次线程X运行了:10次线程X运行了:11次*/ /[code]
// 这个是我无聊用来做测试的 为什么 输出的会是main停止 而不是其他的?
}
因为你的stop方法确实是在main函数里面调用的,不管你停止哪个线程结果都一样,但是你如果在运行线程里面打印效果就不同了哦,看看上面红色部分。