------- android培训、java培训、期待与您交流! ----------
1,线程的概念
1 什么是进程?
当前正在运行的程序!
2 OS为每个进程分配内存
每个进程都有自己独立的内存空间
进程之间不能共享数据
3 进程的代码谁来执行
进程中,可以理解为有很多的代码,执行代码的叫线程!
如果一个进程中有多个执行的轨迹,那么就是同时有多个线程在执行代码。
这样的程序叫多线程程序!
4 进程中同时执行的多个任务
多线程
5 把人看做是一个进程
人如果是一个进程,那么人也是多线程的
因为人可以一边走路,一边听歌,还可以一边吃东西。
6 线程的概念
进程在执行过程中,可能需要多个任务同时执行,每个任务的执行者就是线程。线程就是进程中的一个执行控制单元。
7 没有线程的进程
不存在,怎么也要有一个线程。
8 多线程的用途
同时执行多个任务,可以提高效率。
可以完成多个任务并发的效果。
9 理解线程(人和任务)
人:是执行任务的人,即线程;
任务:线程要执行的任务就是,这里说的任务,通常用一个方法表示。
10 JVM需要运行我们的主线程,还有垃圾回收器
JVM是多线程的!
11 线程是部分,进程是整体
线程是部分,而进程整体。
部分不能单独存在,线程不能单独启动,只有进程启动后线程才可以启动。
一个进程中的多个线程,可以共享这个进程的数据。
12 需要使用Java API中的线程类(Thread)
我们需要使用 Thread类来创建线程。
2,多线程概述
理解:多个线程就好比需要通电才能运行的多个机器人!但我们只能一个电源,这个电源就是CUP。
2 线程的随机性,以及时间分片
线程的运行时间分派由 CPU来决定,如果多有多个线程,那么CPU也不会有顺序的去执行它们,而是随机的。
当一个线程运行一段时间之后,应该主动阻塞,这样CPU就会把资源分派给其他线程。如果线程不合作,自己不主动阻塞,那么CPU会在一段时间之后强行停止这个线程的运行,把资源分派给其他线程。
CPU会为每个线程都指定一个时间分片,当时间片用完时,线程还不阻塞,那么就强行停止它。
3 多核CPU的不同
多核CPU就相当于是多个CPU,那么与上面说的效果就不太一样了。
4 同一个多线程程序多次运行,结果可能不一样
因为线程的随机性。
5 主线程结束时,JVM是否结束
No,只有所有线程都结束了,JVM才会线程。
6 多线程程序的调用栈
每个线程都有自己的调用栈,都有自己的执行轨迹!
7 当某个线程出现异常时
异常不能跨线程。
如果是main抛出了异常,那么主线程会终止,但其他线程不会终止。
如果t1线程抛出了异常,那么t1终止,而main不会终止。
3,创建线程的两种方法
|--1. 继承 Thread
|--历程如下
public class ThreadDemo1 { public static void main(String[] args) throws InterruptedException { Thread th = new MyThread();//创建线程类的对象,自己有任务的线程。 th.start();//启动线程 for(int i = 0; i < 10; i++) { System.out.print("a"); Thread.sleep(200);//让当前程序休眠100毫秒 } } } class MyThread extends Thread { public void run() { for(int i = 0; i < 10; i++) { System.out.print("b"); try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); }//让当前程序休眠100毫秒 } } }
|--2. 实现 Runnable
|--历程如下
public class RunnableTest { public static void main(String[] args){ PrintA pa = new PrintA(); Thread tr = new Thread(pa); tr.start(); for(int i =0;i<10;i++){ System.out.println("b"); } } } class PrintA implements Runnable { public void run(){ for(int i=0;i<10;i++){ System.out.println("a"); } } }