- 概念
- 程序
- 进程
- 线程
- 多线程
- 并发与并行
- 并行
- 并发
- 进程和线程的区别
- 区别1
- 区别2
- 区别3
- 区别4
- 多线程的优点
- java程序中的线程
- 创建多线程
- 继承Thread类,重写run方法
- 步骤
- start()
- run()
- 实现Runnable接口,重写run方法
- 步骤
- 匿名内部类
感谢
参考了唐浩荣
唐浩荣: https://www.cnblogs.com/tanghaorong
一组计算机能识别和执行的静态代码,静态对象。
进程是指一个内存中运行的应用程序
一个进程中可以包含多个线程
一个进程可以由多个线程组成,多个线程可以共享一个进程的内存空间。
多线程一个进程在运行时产生了多个线程,这些线程同时运行或交替运行
多线程的作用是提高程序的效率
并发与并行 并行多个处理器或者是多核的处理器同时处理多个不同的任务.
并发一个处理器同时处理多个任务。
(我们要了解的是并发编程)
参考了仇实
区别1进程:进程是系统资源分配的最小单位
线程:线程是cpu操作和调度的最小单位
线程的创建成本远远低于进程
所以开发多任务运行的时候,通常考虑创建多线程,而不是创建多进程
进程中的线程共享地址空间,进程间的通信的代价远大于线程间的通信
线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。
进程:进程作为资源分配的单位,系统在运行时会为每个进程分配独立的内存空间。所以进程中的数据存放空间是独立的(堆空间和方法区内存)
(进程与进程之间是独立的)
线程:在同一个进程中的线程有共享的和独有的资源
线程之间独有的资源有栈区,TLS
线程共享的资源 代码区 数据区 堆区 栈区 动态链接库 文件
(线程与线程之间内存和资源多是共享的,但是也有独立的如栈)
1.提高程序的响应
2.最大限度的利用CPU的空闲时间来处理其他任务。
3.提高程序的效率。注意:它不是提高运行速度,而是提高CPU的使用率,从而使程序的运行效率加快了。
3.创建线程的代价则小的多,多任务并发时,多线程效率高。
Java 运行时至少会启动两个线程,每当Java执行一个类时,都会启动一个JVM,并且加载对应的class文件,而每一个JVM在操作系统中启动了一个main()方法的主线程,Java 本身具备了垃圾的收集机制,所以在 Java 运行时至少会启动两个线程。
- 主线程main()
- 垃圾回收机制线程
创建多线程的三种方法
继承Thread类,重写run方法 步骤- 创建继承Thread类的子类
- 重写Thread类的run()方
- 创建Thread类的子类对象
- 通过子类对象调用start()方法
public class Thread1 extends Thread{//继承Thread类
public void run() {//重写run方法
for(int i=1;i<=10;i++)
{
System.out.println(i);
if(i%2==0) {
try {
sleep(3000);//每执行一次程序休眠三秒
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
Thread1 t1=new Thread1();//创建了两个线程类的子类对象
Thread1 t2=new Thread1();
t1.start();// 开启线程用start()方法
t2.start();//开启了这两个线程,多线程
}
}
上面创建了两个线程,而这两个线程是交替进行的
Java的线程调度策略是优先级抢占式调度,首先让优先级高的线程大概率能够使用CPU资源,如果线程的优先级相同,那么CPU会随机调度(线程随机性),上面的代码都是默认的优先级,创建的两个线程同时在抢占CPU的资源,那么谁能抢占到的CPU资源就执行。
start()启动线程
run()封装被线程执行的代码
实现Runnable接口,重写run方法 步骤- 创建一个实现Runnable接口的类
- 实现类去实现Runnable接口中的抽象方法run()
- 创建实现类的对象
- 创建一个Thread类,将实现类的对象传入到Thread类的构造器中
- 通过Thread类的对象调用start()方法
public class Thread2 implements Runnable{//实现Runnable接口中run方法
@Override
public void run() {//实现了run方法
// TODO Auto-generated method stub
}
public class Demo {
public static void main(String[] args) {
//创建实现类对象
Thread2 a = new Thread2();
//创建一个Thread类,将实现类的对象传入到Thread类的构造器中。
Thread a1 = new Thread(a);
Thread a2 = new Thread(a);
//5、通过Thread类的对象调用start()方法。
a1.start();
a2.start();
}
}
匿名内部类
参考唐浩荣



