线程概念问题!!

yangyongjie81 2008-07-05 07:12:19
import java.util.*;

public class Fun1Demo{
public static void main(String[] agrs){
Scanner scanner = new Scanner(System.in);
Thread a = new Thread(new Fun1());
System.out.println("请输入密码:");
a.start();
//*1
String code = scanner.next();

Fun1.ak = false;
}
}

class Fun1 implements Runnable{
public static boolean ak = true;
public void run(){
while(ak){
System.out.print("\010" + "#");
try{
//*2
Thread.currentThread().sleep(50);
}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
/*程序运行到1的时候mian线程等待输入 进入锁定状态! 后线程A执行!
*a线程执行到2的时候线程调用sleep(50);进入锁定状态!
*a线程50豪秒秒后,就苏醒 进入Runnable 状态可以被调度了
*main线程继续进行!
*如果我一直不输入!(那么mian()是不是一直被锁定!)
*50豪秒后,a苏醒而main还在锁定状态 为什么不调度a线程继续执行
*结果大家运行下程序都知道-> 只要我不输出!程序就一直停在那里
*a 和 main 都不执行! 就是这里我想不通是什么原因 哪位大虾能
*帮我解释下其中的原理么 !回答的好的话 我会到+ 分的!
*/
...全文
71 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sagezk 2008-07-05
  • 打赏
  • 举报
回复
晕呐,3楼4楼是同一个人,还有5楼。
yangyongjie81 2008-07-05
  • 打赏
  • 举报
回复
谢谢4楼 我终于懂了 a线程是一直在执行的只是我没发觉! main()不输出则一直是堵塞状态;
a就会每50豪秒执行一次输出(); 是这样的吧! 哈哈! 谢谢你了 ! 3楼说的可能也是这个道理
不过没你说的明白!还是谢谢你的回答!

JAVA 菜鸟.....
sagezk 2008-07-05
  • 打赏
  • 举报
回复
为了验证你可以试试 System.out.print("\010" + "##");
sagezk 2008-07-05
  • 打赏
  • 举报
回复
'\010' 是控制字符 "Backspace" 即退格。你的线程 a 每次先打一个退格符抹掉前一个 # 然后再打一个 # 给你的感觉就好像根本没打印字符。是你的错觉,你的线程 a 在那儿乖乖地运行着呢。
sagezk 2008-07-05
  • 打赏
  • 举报
回复
import java.util.*;

public class Fun1Demo {

public static void main(String[] agrs) {
Scanner scanner = new Scanner(System.in);
Thread a = new Thread(new Fun1());
System.out.println("请输入密码:");
a.start();
// *1
String code = scanner.next();
Fun1.ak = false;
}

}

class Fun1 implements Runnable {

public static boolean ak = true;

public void run() {
while (ak) {
System.out.print(">"); //是此处的字符 \010 在作怪,你的程序逻辑没错
//System.out.print("\010" + "#");
try {
// *2
Thread.sleep(50); //sleep 是静态方法,使用类名调用就行
//Thread.currentThread().sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

}
li_589 2008-07-05
  • 打赏
  • 举报
回复
过来学习

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧