一 如何去理解多线程
百度定义:
太过于官方,简单理解就是 一个进程(程序)下运行时有多个线程。
由此引出来三个概念:
- 什么是进程
- 什么是线程
什么是进程?
进程是指在系统中正在运行的一个应用程序,
进程是由进程控制块、程序段、数据段三部分组成;
-
系统进程
凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身。
-
用户进程
用户进程就是所有由你启动的进程。进程是操作系统进行资源分配的单位。
每一个.exe都是一个用户线程
进程控制块: 包含进程的描述信息和控制信息,是进程存在的唯一标志
程序段 :用于描述进程要完成的功能,是控制进程执行的指令集
数据段:是程序在执行时所需要的数据和工作区
什么是线程?
线程是系统分配处理器cpu 时间资源的基本单元,或者说进程之内独立执行的一个单元。
线程在java中的运用:
- 创建多线程 —— 继承 Thread
public class ThreadTest extends Thread{ //继承Thread类
public static void main(String[] args) {
ThreadTest threadTest=new ThreadTest();
threadTest.start();
}
@Override
public void run(){
threadPrintln.threadPrintln2();
};
}
class threadPrintln{
public static void threadPrintln2(){
System.out.println("多线程继承 Thread ");
}
}
点进去 Thread的类, 看源码
- 创建多线程 —— 实现 Runnable
public class RunnableTest implements Runnable
{
@Override
public void run() {
runablePrintln.runablePrintln2();
}
public static void main(String[] args) {
RunnableTest runnableTest=new RunnableTest();
new Thread(runnableTest).start();
}
}
class runablePrintln{
public static void runablePrintln2(){
System.out.println("多线程 实现Runnable ");
}
}
源码分析
实现了Runnable接口
- 创建多线程 —— 实现 Callable
//callable的好处 1、可以定义返回值 2、可以抛出异常
- public class CallableTest implements Callable<Boolean> {
@Override
public Boolean call() throws Exception {
callablePrintln.callablePrintln2();
return true;
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
CallableTest callableTest=new CallableTest();
//创建执行服务:
ExecutorService ser= Executors.newFixedThreadPool(1);
// 提交执行:
Future<Boolean> result= ser.submit(callableTest);
System.out.println("result : "+result.get());
//关闭服务:
ser.shutdownNow();
}
}
class callablePrintln{
public static void callablePrintln2(){
System.out.println("多线程 实现callable类");
}
}
源码复习