Java 多线程分析 (六) ----三种方式实现Thread

1.Java中线程和进程的理解:线程是进程较小的划分单位,一个进程至少有一个线程。

多进程:操作系统能够执行不同的程序(window下既可以打开QQ,又可以打开播放器)

多线程:在同一个程序中执行的不同的路径。线程是一个程序内部不同的执行的不同的路劲。

总结:线程是进程的较小的划分单位,对于单核CPU而言,在某个时间段之内(时中周期)只能够执行一个线程(一条流水线),但是由于CPU的工作频段很高,所以我们感觉不到CPU在某个时钟周期上在执行一个内存,对于单核CPU和双核CPU而言,引发多并行和多并发的概念,

加深对多线程理解,通过对其中内存的分析:在main主线程中遇到Thread。start(),在main上会自动的开辟一个分支线程,但是主线程还是会自动的运行,不会再此等待分支线程运行,在一个main函数有几个分支河流

2.多并行 Vs 多并发

并行:在同一个时钟周期上,程序并行运行(有多个CPU)

并发:两个或者多个事件在一个时间间隔之内发生。

 3.如何开启多线程线程:继承方法和接口方法(常用)和采用匿名内部(对run方法进行重载)

第一种:采用继承父类Thread的方法,同时对父类的run方法进行重写(不是重载):

 1 public class student extends Thread{
 2 //采用继承的方式,在子线程输出1到10
 3 public void run()
 4 {
 5 //这里对父类的方法进行重写
 6 for(int i=0;i<10;i++)
 7 {
 8 System.out.println(Thread.currentThread().getName()+"线程"+i);
 9 }
10 }
11 public static void main(String [] args)
12 {    student s1=new student();
13 Thread t1=new Thread(s1);
14 t1.start();
15 System.out.println("Main 线程");
16 }
17 }

通过定义一个关于new student的s1对象,通过调用

 第二中采用的是实现接口的方式:

 1 public class student implements Runnable{
 2     //采用继承的方式,在子线程输出1到10
 3     public void run()
 4     {
 5     //这里对父类的方法进行重写
 6     for(int i=0;i<10;i++)
 7      {
 8         System.out.println(Thread.currentThread().getName()+"线程"+i);
 9       }
10     }
11     public static void main(String [] args)
12     {    
13         Thread t1=new Thread(new student());
     14 t1.start(); 15 System.out.println("Main 线程"); 16 } 17 }

第三种:不同于第二种直接采用匿名类部类的方法对void run 方法直接重载,直接在Thread中对run方法进行重载,不需要用什么借口或者继承

 1 package ExecutorDemoPagage;
 2 
 3 public class student {
 4     //采用继承的方式,在子线程输出1到10
 5     
 6     public static void main(String [] args)
 7     {    
 8         new Thread(){
 9             public void run()
10             {
11             //这里对父类的方法进行重写
12             for(int i=0;i<10;i++)
13              {
14                 System.out.println(Thread.currentThread().getName()+"线程"+i);
15               }
16             }
17         }.start();
18         System.out.println("Main 线程");
19     }
20 }

 4.线程的状态转换:这个就是线程运行过程中不同状态的转换

5.设置线程的优先级别:

 1 Thread T1=new Thread(new Student());

2 T1.SetProiority(Thread,NoRM_PRIORITY=3); 

原文地址:https://www.cnblogs.com/woainifanfan/p/6602689.html