有一个例子生动说明多线,坛友提供,但我不知道什么意思? 我们2个人等于2个线程,我们跑的一样快。 每跑1米,我们都休息100秒,然后大喊一声。 你猜我们的最后结果是什么? 我的理解: 觉得跑得太慢,应该给我们长一点的距离就是说让线程运行得久一些。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 晕,你想象如果大家都喊的话你听到的声音是什么?是不是交叉的,这个喊完那个喊,而不是像单线程那样,一个人喊完了另一个人喊.就像你的例子里那样,你认为another执行完了,两个人一起跑的,你怎么知道人家跑完了呢. 这跟时间长有啥关系有点时间够分析就行了这个问题很难让人看明白但是你心中的疑惑我很明白,你一直把多线程当原始的串行来看待。cpu是串行的没错,但是时间片轮转速度飞快啊。 看看,理解,运行一下我下面的多线程的例子,或许你就会明白了:public class Sample03 implements Runnable { private int num = 1; public void run() { while (num < 21) { System.out.println(Thread.currentThread().getName() + "----->" + num); try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } num++; } } /** * @param args */ public static void main(String[] args) { Sample03 test = new Sample03(); Sample01 s1 = new Sample01("s1"); Sample01 s2 = new Sample01("s2"); Thread t1 = new Thread(test); Thread t2 = new Thread(test); Thread t3 = new Thread(test); t1.start(); t2.start(); t3.start(); try { Thread.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } t1.setName("t1"); t2.setName("t2"); t3.setName("t3"); int num = 1; while (num < 21) { System.out.println(Thread.currentThread().getName() + "----->" + num++); try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("\nmain is over"); }} 宏观上并行,微观上串行。这就是多线程。两个人跑步就是两个子线程。两个同时sleep,同进又run,那有意义吗? Java要学哪些东西啊?大家说说啊! io中的readline方法当读到一空行时返回的字符串应该是什么?null? "\n"? 还是“”啥也没有? 大家别用西红柿砸我呀,JBuilder9如何配置 奇怪的问题,解决给200分,参与有分 请教关于JNI的问题! 程序疑问,请指教! java配置问题,没辙了 applet簽名問題,急,在线等 通过PL/SQL查询数据库时,所有的中文全变成“靠”了??这是什么原因? 如何注销JTable的回车键? 多线程的输出有问题。非常不理解。 继承关系中的构造器问题,困惑···
是不是交叉的,这个喊完那个喊,而不是像单线程那样,一个人喊完了另一个人喊.就像你的例子里那样,你认为another执行完了,两个人一起跑的,你怎么知道人家跑完了呢.
这个问题很难让人看明白
但是你心中的疑惑我很明白,你一直把多线程当原始的串行来看待。
cpu是串行的没错,但是时间片轮转速度飞快啊。
private int num = 1;
public void run() {
while (num < 21) {
System.out.println(Thread.currentThread().getName() + "----->" + num);
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
num++;
}
}
/**
* @param args
*/
public static void main(String[] args) {
Sample03 test = new Sample03();
Sample01 s1 = new Sample01("s1");
Sample01 s2 = new Sample01("s2");
Thread t1 = new Thread(test);
Thread t2 = new Thread(test);
Thread t3 = new Thread(test);
t1.start();
t2.start();
t3.start();
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
t1.setName("t1");
t2.setName("t2");
t3.setName("t3");
int num = 1;
while (num < 21) {
System.out.println(Thread.currentThread().getName() + "----->" + num++);
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("\nmain is over");
}
}
微观上串行。
这就是多线程。两个人跑步就是两个子线程。
两个同时sleep,同进又run,那有意义吗?