java线程详解一

程序、进程、线程的概念以及它们之间的关系

程序:指代码的集合,是应用程序执行的脚本。

进程:进程是一个静态的概念,指内存中运行的应用程序,是系统运行程序的基本单位,在一个系统中可以同时运行多个程序,每个程序都对应一个进程。

线程:是指进程中的一个执行流程,是比进程更小的运行单位,一个进程中可以运行多个线程,

在同一个时间点上,一个CPU只能支持一个线程在执行。因为CPU运行的速度很快,因此我们看起来的感觉就像是多线程一样。

什么才是真正的多线程?如果你的机器是双CPU,或者是双核,这确确实实是多线程。

创建多线程的方式

1、继承 java.lang.Thread类,并重写run方法

2、实现 java.lang.Runnable接口,并重写run方法

java中的main()方法是一个线程,这个线程叫主线程

实例一:继承Thread类创建线程

 1 public class ThreadTest {
 2 
 3     public static void main(String[] args) {
 4 
 5         myThread th = new myThread();
 6         th.start();//开启这个线程,并执行run方法
 7 
 8         while (true){
 9             System.out.println(Thread.currentThread().getName());
10             System.out.println("兔子加油,别骄傲");
11         }
12 
13 
14     }
15 }
16 
17 /**
18  * 自定义线程
19  */
20 class myThread extends Thread{
21 
22     @Override
23     public void run() {
24 
25         while (true){
26             System.out.println(this.getName());//获取线程名称
27             System.out.println("乌龟领先了,加油");
28         }
29 
30 
31     }
32 }

实例二:实现Runnable接口创建线程

 1 public class ThreadTest2 {
 2 
 3     public static void main(String[] args) {
 4 
 5         myThread2 th = new myThread2();
 6         Thread thread = new Thread(th);
 7         thread.start();//开启这个线程,并执行run方法
 8 
 9         while (true){
10             System.out.println(Thread.currentThread().getName());//获取线程名称
11             System.out.println("兔子加油,别骄傲");
12         }
13 
14 
15     }
16 }
17 
18 /**
19  * 自定义线程
20  */
21 class myThread2 implements Runnable{
22 
23     @Override
24     public void run() {
25 
26         while (true){
27             System.out.println(Thread.currentThread().getName());//获取线程名称
28             System.out.println("乌龟领先了,加油");
29         }
30 
31 
32     }
33 }

实例三:内部类的方式创建线程(建议使用)

 1 public class ThreadTest3 {
 2 
 3     public static void main(String[] args) {
 4 
 5         Thread th = new Thread(new Runnable() {
 6             @Override
 7             public void run() {
 8                 while (true){
 9                     System.out.println(Thread.currentThread().getName());//获取线程名称
10                     System.out.println("乌龟领先了,加油");
11                 }
12 
13 
14             }
15         });
16         th.start();//开启这个线程,并执行run方法
17 
18         while (true){
19             System.out.println(Thread.currentThread().getName());//获取线程名称
20             System.out.println("兔子加油,别骄傲");
21         }
22 
23 
24     }
25 }

多个线程运行如下:

上面可以看出两个两个线程都执行了,这两个线程是并行执行的,它们都在抢夺CPU的使用权。这样刚好充分利用了CPU的使用率

start()方法和run()方法的区别

strat方法:用于开启一个线程,此线程并不会运行,

run方法:运行一个线程,它是由JVM再运行相应线程时直接调用的

线程的生命周期

线程的生命周期分为五中状态:1 新建状态、2 可执行状态、3 运行状态、4 阻塞状态、5 死亡状态

sleep():让当前线程睡眠,采用毫秒值

join():让正在运行的线程停下来,执行加入后的线程,并一直执行完毕,再执行被终止的线程

interrupt():终止线程

yield(): 把正在运行的线程,打回可以执行的状态,继续争抢CPU的使用权

posted @ 2019-05-20 10:13  子爵号  阅读(157)  评论(0编辑  收藏  举报