线程

多任务处理有两种类型:
--基于进程
--基于线程

进程:是指一种“自包容”的运行程序,由操作系统直接管理,直接运行,有自己的地址空间,每个进程一开启都会消耗内存。

线程:是进程内部单一的顺序控制流。一个进程拥有多个线程。多个线程共享一个进程的内存空间。


主线程:

main方法一运行,就开启主线程。
主线程特点:
1、最先开始
2、最后结束
3、可以开启其他的子线程
4、回收资源


创建线程的方式:
方式一: 继承Thread类,然后重写run()方法。
方式二: 实现Runnable接口,实现run()。

线程中start方法和run方法的区别:
      启动线程,应该调用线程类的start()方法,是在主线程之外,另外创建子线程。主线程和子线程交替运行。
如果直接调用run()方法,不会单独创建子线程,是普通方法调用,会在run()执行完毕以后,再去执行其他代码。

 1 package 线程;
 2 
 3 
 4 
 5 public class ThreadTest {
 6     public static void main(String[] args) {
 7         
 8         //方式一线程  测试
 9         OneThread on=new OneThread();
10         //启动线程。线程启动后,会调用Thread类的run()
11         on.start();
12         //只是普通的该方法调用,只有该方法执行完后才会执行其他方法
13         on.run();
14         //方式二线程  测试
15         TwoThread two=new TwoThread();
16         //以Runnable 接口实现类作参数,表示线程启动后,会调用Runnable实现类的run()
17         Thread th=new Thread(two);
18         th.start();
19         
20         for (int i = 0; i <10; i++) {
21             System.out.print(i+" ");            
22             try {
23                 //休眠,让当前线程休眠500毫秒,然后继续执行
24                 Thread.sleep(500);
25             } catch (InterruptedException e) {
26                 // TODO Auto-generated catch block
27                 e.printStackTrace();
28             }
29         }
30     }
31 
32 }
33 /**
34  * 创建线程       方式一
35  * @author Administrator
36  *
37  */
38 class OneThread extends Thread{
39 
40     @Override
41     public void run() {
42         for (int i = 10; i < 20; i++) {
43             System.out.print(i+" ");
44             try {
45                 Thread.sleep(500);
46             } catch (InterruptedException e) {
47                 // TODO Auto-generated catch block
48                 e.printStackTrace();
49             }
50         }
51     }    
52 }
53 /**
54  * 创建线程       方式二
55  * @author Administrator
56  *
57  */
58 class TwoThread implements Runnable{
59 
60     @Override
61     public void run() {
62         for (int i = 20; i <30; i++) {
63             System.out.print(i+" ");
64         }
65         try {
66             Thread.sleep(500);
67         } catch (InterruptedException e) {
68             // TODO Auto-generated catch block
69             e.printStackTrace();
70         }
71     }
72 }    

线程状态:
     新建: 通过new的方式产生一个线程对象
     就绪: start启动,运行run方法
     运行: 执行run方法
     死亡: 线程run()方法执行完毕
     睡眠: 调用线程sleep()方法
     等待: 调用Object的wait()方法
     挂起:调用yield()方法,线程显示出让CPU控制权。
     阻塞: 等待IO事件输入。如JOptionPane输入框

线程优先级:
      当两个或两个以上的线程同时处理就绪状态,那么优先级高的线程,会优先得到执行。线程的优先级分为10级,默认为5级。数字越大,优先级越高。在开发中可以通过Thread类的setPriority()改变优先级。

原文地址:https://www.cnblogs.com/jichuang/p/6680440.html