多线程概述
Posted gbhh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程概述相关的知识,希望对你有一定的参考价值。
概述
多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。
进程:执行程序一次的执行过程,动态的,由系统资源分配的单位。
线程:是cpu调度和执行的单位。
进程包括多个线程,至少有一个线程。
真正的多线程是有多个cpu,即多核。
模拟出来的多线程是一个cpu,在一个时间点只能执行一个代码,因为切换的很快,所以就有了同时执行的错觉。
模型图片
使用方法
Thread
- 继承Thread
- 覆写run方法
- 创建对象
- 调用start方法
Runnable
- 接口Runnable
- 覆写run方法
- 创建对象
- 创建Thread对象,将上一个对象传入,调用start方法
Callable
- 接口Callable
- 覆写call方法,相当于run方法
- 创建对象
- 创建执行服务 Executors.newFixedThreadPool(3);
- 提交执行 ser.submit(t1);
- 获取结果 r1.get();
- 关闭服务 ser.shutdownNow();
实例
Thread
/**
* 多线程 第一种 通过Thread实现
*/
public class ThreadDemo01 extends Thread {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("我在看代码--"+i);
}
}
public static void main(String[] args) {
ThreadDemo01 t1 = new ThreadDemo01();
// 普通的调用方法启动,按照顺序执行
// t1.run();
t1.start(); //正确的线程启动,不一定立即启动,等待cpu调度
for (int i = 0; i < 100; i++) {
System.out.println("我在学习--"+i);
}
}
}
Runnable
public class RunnableDemo01 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("我是子线程--"+i);
}
}
public static void main(String[] args) {
RunnableDemo01 runnable = new RunnableDemo01();
Thread thread = new Thread(runnable);
thread.start();
for (int i = 0; i < 100; i++) {
System.out.println("我是主线程--"+i);
}
}
}
Callable
/**
* 通过Callable 实现多线程
* 主要环节在四个注释的地方
*/
public class CallableDemo01 implements Callable<Boolean> {
private String name;
public CallableDemo01(String name) {
this.name = name;
}
@Override
public Boolean call() throws Exception {
for (int i = 0; i < 100; i++) {
System.out.println("我在看"+name+"--"+i);
}
return true;
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
CallableDemo01 t1 = new CallableDemo01("淘宝");
CallableDemo01 t2 = new CallableDemo01("京东");
CallableDemo01 t3 = new CallableDemo01("苏宁易购");
//创建执行服务
ExecutorService ser = Executors.newFixedThreadPool(3);
//提交执行
Future<Boolean> r1 = ser.submit(t1);
Future<Boolean> r2 = ser.submit(t2);
Future<Boolean> r3 = ser.submit(t3);
// 获取结果
Boolean res1 = r1.get();
Boolean res2 = r2.get();
Boolean res3 = r3.get();
//关闭服务
ser.shutdownNow();
for (int i = 0; i < 100; i++) {
System.out.println("我正在看着你们--"+i);
}
}
}
一句话
把一个任务交给多个线程来运行,就好比田径场分成1,2,3...等跑道,具有通用性。
以上是关于多线程概述的主要内容,如果未能解决你的问题,请参考以下文章