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);