最近对多线程有了兴趣,所以今天上网搜了搜,看了看。
首先比较一下两种不同的实现线程的方法的结果:
程序如下:
package com.tangtang.thread.test;
class MyThread extends Thread {
public int x = 0;
public MyThread() {
System.out.println(x + "---gouzaofangfa MyThread");
}
public void run() {
System.out.println(x++ + "-----x");
}
}
class MyRunnable implements Runnable {
public int y = 0;
public MyRunnable() {
System.out.println(y + "---gouzaofangfa MyRunnable");
}
public void run() {
System.out.println(y++ + "-----y");
}
}
public class ThreadTest {
public static void main(String[] args) {
for(int i = 0; i < 10; i ++) {
MyThread mt = new MyThread();
mt.start();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
MyRunnable mr = new MyRunnable();
for(int i = 0; i < 10; i++) {
Thread t = new Thread(mr);
t.start();
}
}
}
运行结果如下:
0---gouzaofangfa MyThread
0---gouzaofangfa MyThread
0-----x
0---gouzaofangfa MyThread
0-----x
0---gouzaofangfa MyThread
0---gouzaofangfa MyThread
0-----x
0-----x
0---gouzaofangfa MyThread
0-----x
0---gouzaofangfa MyThread
0-----x
0---gouzaofangfa MyThread
0---gouzaofangfa MyThread
0-----x
0---gouzaofangfa MyThread
0-----x
0-----x
0-----x
0---gouzaofangfa MyRunnable
0-----y
1-----y
2-----y
3-----y
4-----y
5-----y
6-----y
7-----y
8-----y
9-----y
很明显看出来原因。
我在csdn上下了一个程序包,估计把这个看明白了关于多线程的就都明白了。
首先比较一下两种不同的实现线程的方法的结果:
程序如下:
package com.tangtang.thread.test;
class MyThread extends Thread {
public int x = 0;
public MyThread() {
System.out.println(x + "---gouzaofangfa MyThread");
}
public void run() {
System.out.println(x++ + "-----x");
}
}
class MyRunnable implements Runnable {
public int y = 0;
public MyRunnable() {
System.out.println(y + "---gouzaofangfa MyRunnable");
}
public void run() {
System.out.println(y++ + "-----y");
}
}
public class ThreadTest {
public static void main(String[] args) {
for(int i = 0; i < 10; i ++) {
MyThread mt = new MyThread();
mt.start();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
MyRunnable mr = new MyRunnable();
for(int i = 0; i < 10; i++) {
Thread t = new Thread(mr);
t.start();
}
}
}
运行结果如下:
0---gouzaofangfa MyThread
0---gouzaofangfa MyThread
0-----x
0---gouzaofangfa MyThread
0-----x
0---gouzaofangfa MyThread
0---gouzaofangfa MyThread
0-----x
0-----x
0---gouzaofangfa MyThread
0-----x
0---gouzaofangfa MyThread
0-----x
0---gouzaofangfa MyThread
0---gouzaofangfa MyThread
0-----x
0---gouzaofangfa MyThread
0-----x
0-----x
0-----x
0---gouzaofangfa MyRunnable
0-----y
1-----y
2-----y
3-----y
4-----y
5-----y
6-----y
7-----y
8-----y
9-----y
很明显看出来原因。
我在csdn上下了一个程序包,估计把这个看明白了关于多线程的就都明白了。