继承的方式:
//创建线程的方式一:继承于Thread类 public class TestThread2 { public static void main(String[] args) { PrintNum p1 = new PrintNum("线程1"); PrintNum p2 = new PrintNum("线程2"); p1.setPriority(Thread.MAX_PRIORITY);//10 p2.setPriority(Thread.MIN_PRIORITY);//1 p1.start(); p2.start(); } } class PrintNum extends Thread { @Override public void run() { for (int i = 1; i <= 100; i++) { if (i % 2 == 0) { System.out.println(Thread.currentThread().getName() + ":" + i); } } } public PrintNum(String name) { super(name); } }
结果:
线程1:2
线程1:4
线程1:6
线程1:8
线程1:10
线程1:12
线程1:14
线程1:16
线程1:18
线程1:20
线程1:22
线程1:24
线程1:26
线程1:28
线程1:30
线程1:32
线程1:34
线程1:36
线程1:38
线程1:40
线程1:42
线程1:44
线程1:46
线程1:48
线程1:50
线程1:52
线程1:54
线程1:56
线程1:58
线程1:60
线程1:62
线程1:64
线程1:66
线程1:68
线程1:70
线程1:72
线程1:74
线程1:76
线程1:78
线程1:80
线程1:82
线程1:84
线程1:86
线程1:88
线程1:90
线程1:92
线程1:94
线程1:96
线程1:98
线程1:100
线程2:2
线程2:4
线程2:6
线程2:8
线程2:10
线程2:12
线程2:14
线程2:16
线程2:18
线程2:20
线程2:22
线程2:24
线程2:26
线程2:28
线程2:30
线程2:32
线程2:34
线程2:36
线程2:38
线程2:40
线程2:42
线程2:44
线程2:46
线程2:48
线程2:50
线程2:52
线程2:54
线程2:56
线程2:58
线程2:60
线程2:62
线程2:64
线程2:66
线程2:68
线程2:70
线程2:72
线程2:74
线程2:76
线程2:78
线程2:80
线程2:82
线程2:84
线程2:86
线程2:88
线程2:90
线程2:92
线程2:94
线程2:96
线程2:98
线程2:100
实现的方式:
//创建多线程的方式二:通过实现的方式 /** * 对比提一下继承的方式 VS 实现的方式 * 1.联系: public class Thread implements Runnable * 2.哪个方式好?实现的方式优于继承的方式 * why? 1.避免了java中单继承的局限性 2.如果多个线程要操作同一份资源(或数据),更适合使用实现的方式 * */ public class TestThread3 { public static void main(String[] args) { //3.创建一个Runnable接口实现类的对象 PrintNum1 p = new PrintNum1(); // p.start(); 不行 // p.run(); 不行 //要想启动一个多线程,必须调用start(); //4.将此对象作为形参传递给Thread类的构造器中,创建Thread类的对象,此对象即为一个线程 Thread t1 = new Thread(p); //5.调用start()方法,启动线程并执行run() t1.start(); //启动线程,执行Thread对象生成时构造器形参的对象的run()方法 //再创建一个线程 Thread t2 = new Thread(p); t2.start(); } } // 1.创建一个实现了Runnable接口的类 class PrintNum1 implements Runnable { //2.实现接口的抽象方法 @Override public void run() { //子线程执行的代码 for (int i = 1; i <= 100; i++) { if (i % 2 == 0) { System.out.println(Thread.currentThread().getName() + ":" + i); } } } }
结果:
Thread-0:2
Thread-0:4
Thread-0:6
Thread-0:8
Thread-0:10
Thread-0:12
Thread-0:14
Thread-0:16
Thread-0:18
Thread-0:20
Thread-0:22
Thread-0:24
Thread-0:26
Thread-0:28
Thread-0:30
Thread-0:32
Thread-0:34
Thread-0:36
Thread-0:38
Thread-0:40
Thread-0:42
Thread-0:44
Thread-0:46
Thread-0:48
Thread-0:50
Thread-0:52
Thread-0:54
Thread-0:56
Thread-0:58
Thread-0:60
Thread-0:62
Thread-0:64
Thread-0:66
Thread-0:68
Thread-0:70
Thread-0:72
Thread-0:74
Thread-0:76
Thread-0:78
Thread-0:80
Thread-0:82
Thread-0:84
Thread-0:86
Thread-0:88
Thread-0:90
Thread-0:92
Thread-0:94
Thread-0:96
Thread-0:98
Thread-1:2
Thread-0:100
Thread-1:4
Thread-1:6
Thread-1:8
Thread-1:10
Thread-1:12
Thread-1:14
Thread-1:16
Thread-1:18
Thread-1:20
Thread-1:22
Thread-1:24
Thread-1:26
Thread-1:28
Thread-1:30
Thread-1:32
Thread-1:34
Thread-1:36
Thread-1:38
Thread-1:40
Thread-1:42
Thread-1:44
Thread-1:46
Thread-1:48
Thread-1:50
Thread-1:52
Thread-1:54
Thread-1:56
Thread-1:58
Thread-1:60
Thread-1:62
Thread-1:64
Thread-1:66
Thread-1:68
Thread-1:70
Thread-1:72
Thread-1:74
Thread-1:76
Thread-1:78
Thread-1:80
Thread-1:82
Thread-1:84
Thread-1:86
Thread-1:88
Thread-1:90
Thread-1:92
Thread-1:94
Thread-1:96
Thread-1:98
Thread-1:100