线程的创建和启动 1.1 继承 Thread 类创建线程 步骤如下:
定义 Thread
的子类,并重写该类的 run()
方法.该方法表示线程需要完成的任务,因此 run()
方法被称为线程执行体
创建 Thread
子类的实例,即创建了线程对象
调用线程对象的 start()
方法启动该线程
FirstThread.java
(继承 Thread 的子类)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 package Threads;public class FirstThread extends Thread { private int i; public static void main (String[] args) { for (int i = 0 ; i < 100 ; i++) { System.out.println(Thread.currentThread().getName() + " " + i); if (i == 20 ) { new FirstThread().start(); new FirstThread().start(); System.out.println(Thread.currentThread().getName() + " " + i); } } } @Override public void run () { for (; i < 100 ; i++) { System.out.println(this .getName() + " " + i); } } }
运行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 ............ main 74 main 75 main 76 main 77 main 78 main 79 main 80 main 81 main 82 main 83 main 84 main 85 main 86 main 87 main 88 main 89 main 90 main 91 main 92 main 93 main 94 main 95 main 96 main 97 main 98 main 99 Thread-0 0 Thread-0 1 Thread-0 2 Thread-0 3 Thread-0 4 Thread-0 5 Thread-0 6 Thread-0 7 Thread-0 8 Thread-0 9 Thread-0 10 Thread-0 11 Thread-0 12 Thread-0 13 Thread-0 14 Thread-0 15 Thread-0 16 Thread-0 17 Thread-0 18 Thread-0 19 Thread-0 20 Thread-0 21 Thread-0 22 Thread-0 23 Thread-1 0 Thread-0 24 Thread-1 1 Thread-0 25 Thread-0 26 Thread-0 27 Thread-0 28 Thread-0 29 Thread-0 30 Thread-0 31 Thread-0 32 Thread-0 33 Thread-0 34 Thread-0 35 Thread-0 36 Thread-0 37 Thread-0 38 Thread-0 39 Thread-0 40 Thread-0 41 Thread-0 42 Thread-0 43 Thread-0 44 Thread-0 45 Thread-0 46 Thread-0 47 Thread-0 48 Thread-0 49 Thread-0 50 Thread-0 51 Thread-0 52 Thread-0 53 Thread-0 54 Thread-0 55 Thread-0 56 Thread-0 57 Thread-0 58 Thread-0 59 Thread-0 60 Thread-0 61 Thread-0 62 Thread-0 63 Thread-0 64 Thread-0 65 Thread-0 66 Thread-1 2 Thread-1 3 Thread-1 4 Thread-1 5 Thread-1 6 Thread-1 7 Thread-1 8 Thread-1 9 Thread-1 10 Thread-1 11 .........
Main类中的main方法就是一个线程,然后调用了另外两个线程,这两个线程的实例不能共享
1.2 实现 Runable 接口创建线程类 SecondThread.java
(实现 Runable接口)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package Threads;public class SecondThread implements Runnable { @Override public void run () { int i = 0 ; for (; i < 100 ; i++) { System.out.println(Thread.currentThread().getName() + " " + i); } } }
Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 package Threads;public class SecondThread implements Runnable { private int i; public static void main (String[] args) { for (int i = 0 ; i < 200 ; i++) { System.out.println(Thread.currentThread().getName() + " " + i); if (i == 20 ) { SecondThread st = new SecondThread(); new Thread(st, "线程一" ).start(); new Thread(st, "线程二" ).start(); } } } @Override public void run () { for (; i < 200 ; i++) { System.out.println(Thread.currentThread().getName() + " " + i); } } }
运行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 main 0 main 1 main 2 main 3 main 4 main 5 main 6 main 7 main 8 main 9 main 10 main 11 main 12 main 13 main 14 main 15 main 16 ....................... 线程一 38 线程一 39 线程一 40 线程一 41 线程一 42 线程一 43 线程一 44 线程一 45 线程一 46 线程一 47 线程一 48 线程一 49 线程一 50 线程一 51 线程一 52 线程一 53 线程一 54 线程一 55 线程二 55 线程二 56 线程二 57 线程二 58 线程二 59 线程二 60 线程二 61 线程二 62 线程二 63 线程二 64 线程二 65 线程二 66 ..............
使用 Runable 接口的线程之间可以共享实例变量