/*
时间:2015年3月11日20:17:35
线程的创建和启动的第一种方法:使用继承
通过从结果中分析,很清楚的可以看到,程序分了三条不同的路径,换句话说,也就是程序中就我们看到的,已经存在了三个不同的线程。
m1, m2,以及由虚拟机启动时自动由主方法public static void main(String[] args)所定义的线程等三个线程
而且在没有设置优先级的情况下,我们可以从结果中看到,这三个线程的切换没有规律,而这三个线程都在这一个程序中,也就是所谓的多线程了,
只不过,我们的多线程是一个很小的可以运行的程序罢了。
创建新执行的线程一共有两种方法,这是第一种,也就是下面的模型:
创建新执行线程有两种方法。一种方法是将类声明为 Thread 的子类。
该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。
例如,计算大于某一规定值的质数的线程可以写成:
时间:2015年3月11日20:17:35
线程的创建和启动的第一种方法:使用继承
通过从结果中分析,很清楚的可以看到,程序分了三条不同的路径,换句话说,也就是程序中就我们看到的,已经存在了三个不同的线程。
m1, m2,以及由虚拟机启动时自动由主方法public static void main(String[] args)所定义的线程等三个线程
而且在没有设置优先级的情况下,我们可以从结果中看到,这三个线程的切换没有规律,而这三个线程都在这一个程序中,也就是所谓的多线程了,
只不过,我们的多线程是一个很小的可以运行的程序罢了。
创建新执行的线程一共有两种方法,这是第一种,也就是下面的模型:
创建新执行线程有两种方法。一种方法是将类声明为 Thread 的子类。
该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。
例如,计算大于某一规定值的质数的线程可以写成:
--------------------------------------------------------------------------------
class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
--------------------------------------------------------------------------------
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
--------------------------------------------------------------------------------
然后,下列代码会创建并启动一个线程:
PrimeThread p = new PrimeThread(143);
p.start();
启动线程使用的是start方法。
*/
public class TestThread2 {
public static void main(String[] args) {
MyThread m1 = new MyThread("m1");//定义了两个线程,也就是两个不同的执行路径
MyThread m2 = new MyThread("m2");
new Thread(m1).start();
new Thread(m2).start();
for (int i=0; i<30; i++) {
System.out.println("Main " + i);
}
}
}
public class TestThread2 {
public static void main(String[] args) {
MyThread m1 = new MyThread("m1");//定义了两个线程,也就是两个不同的执行路径
MyThread m2 = new MyThread("m2");
new Thread(m1).start();
new Thread(m2).start();
for (int i=0; i<30; i++) {
System.out.println("Main " + i);
}
}
}
class MyThread extends Thread {
MyThread(String name) {
super(name);
}
public void run() {
for (int i=0; i<30; i++) {
String str = getName();
if (str.equals("m1")) {
System.out.println(getName()+ " " + i);
} else {
System.out.println("--------" + getName()+ " " + i);
}
}
}
}
MyThread(String name) {
super(name);
}
public void run() {
for (int i=0; i<30; i++) {
String str = getName();
if (str.equals("m1")) {
System.out.println(getName()+ " " + i);
} else {
System.out.println("--------" + getName()+ " " + i);
}
}
}
}
/*
D:\java\thread>javac TestThread2.java
D:\java\thread>java TestThread2
Main 0
--------m2 0
--------m2 1
m1 0
m1 1
--------m2 2
Main 1
--------m2 3
m1 2
m1 3
--------m2 4
Main 2
--------m2 5
m1 4
--------m2 6
Main 3
--------m2 7
m1 5
m1 6
--------m2 8
Main 4
--------m2 9
m1 7
--------m2 10
Main 5
--------m2 11
m1 8
--------m2 12
Main 6
--------m2 13
m1 9
--------m2 14
Main 7
--------m2 15
m1 10
--------m2 16
Main 8
--------m2 17
m1 11
--------m2 18
Main 9
--------m2 19
m1 12
--------m2 20
Main 10
Main 11
Main 12
--------m2 21
m1 13
m1 14
--------m2 22
Main 13
Main 14
--------m2 23
m1 15
m1 16
--------m2 24
Main 15
--------m2 25
m1 17
--------m2 26
Main 16
Main 17
--------m2 27
m1 18
--------m2 28
Main 18
--------m2 29
m1 19
Main 19
m1 20
Main 20
m1 21
Main 21
m1 22
Main 22
m1 23
Main 23
m1 24
m1 25
m1 26
Main 24
m1 27
Main 25
m1 28
Main 26
m1 29
Main 27
Main 28
Main 29
Main 0
--------m2 0
--------m2 1
m1 0
m1 1
--------m2 2
Main 1
--------m2 3
m1 2
m1 3
--------m2 4
Main 2
--------m2 5
m1 4
--------m2 6
Main 3
--------m2 7
m1 5
m1 6
--------m2 8
Main 4
--------m2 9
m1 7
--------m2 10
Main 5
--------m2 11
m1 8
--------m2 12
Main 6
--------m2 13
m1 9
--------m2 14
Main 7
--------m2 15
m1 10
--------m2 16
Main 8
--------m2 17
m1 11
--------m2 18
Main 9
--------m2 19
m1 12
--------m2 20
Main 10
Main 11
Main 12
--------m2 21
m1 13
m1 14
--------m2 22
Main 13
Main 14
--------m2 23
m1 15
m1 16
--------m2 24
Main 15
--------m2 25
m1 17
--------m2 26
Main 16
Main 17
--------m2 27
m1 18
--------m2 28
Main 18
--------m2 29
m1 19
Main 19
m1 20
Main 20
m1 21
Main 21
m1 22
Main 22
m1 23
Main 23
m1 24
m1 25
m1 26
Main 24
m1 27
Main 25
m1 28
Main 26
m1 29
Main 27
Main 28
Main 29
*/