Java
进程
指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。
线程
进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
单线程:只能同时执行一个任务,有多个任务需要执行时,需要按照顺序逐一执行
多线程:多个任务同时执行
分时调度:每个线程轮流执行相同的时间
抢占式调度:按照优先级执行,优先级相同时随机选择
Thread类
方法
1.start(); 开始线程
2.run(); 线程执行的内容
创建线程
一
1 定义一个类继承Thread
2 重写run方法
3 创建子类对象
4 调用start方法开始线程
二
1、定义一个类实现Runnable接口
2、重写run方法
3、创建Thread类的对象
4、调用Runnable构造方法传入Thread对象
5、调用Thread类的start方法开始线程
创建对象时可以使用匿名内部类的方式简化代码
两种方法的区别
第二种方式实现Runnable接口避免了单继承的局限性,所以较为常用。实现Runnable接口的方式,更加的符合面向对象,线程分为两部分,一部分线程对象,一部分线程任务。继承Thread类,线程对象和线程任务耦合在一起。一旦创建Thread类的子类对象,既是线程对象,有又有线程任务。实现runnable接口,将线程任务单独分离出来封装成对象,类型就是Runnable接口类型。Runnable接口对线程对象和线程任务进行解耦。
线程池
存储线程的容器,随时取用线程,避免了一直创建线程的繁琐和资源消耗
使用线程池中线程对象的步骤(Runnable接口):
1.创建线程池对象
ExecutorService es=Executors.newFixedThreadPool(线程池容量);
2.创建Runnable接口子类对象
子类名 变量名=new 子类名(); 需要传参时,在类中声明成员变量,并写一个有参的构造方法,直接在创建对象时将参数传入
3.提交Runnable接口子类对象
Future<Integer> f=es.submit(变量名);
4.关闭线程池
es.close();
使用线程池中线程对象的步骤(Callable接口):
创建线程池对象
ExecutorService es=Executors.newFixedThreadPool(线程池容量);
创建Callable接口子类对象
MyCallable r=new MyCallable();
提交Callable接口子类对象
Future<Integer> f=es.submit(r);
关闭线程池
es.close();

浙公网安备 33010602011771号