首页 > 编程语言 > 详细

多线程详解

时间:2020-09-16 23:24:28      阅读:53      评论:0      收藏:0      [点我收藏+]

0.多线程重点:线程实现  线程同步

1.线程简介

多任务:同时做多个事情,看起来是多个任务都在做,其实本质上我们的大脑在同一时间内只做一件事。

多线程例子:一条车道,车太多,会造成道路堵塞,效率极低,为了提高效率,充分利用道路,于是加了多个车道。

生活中的多线程例子:打游戏与朋友开黑

普通方法调用和多线程的区别

技术分享图片

程序,进程,线程

进程:在操作系统中运行的程序就是进程,比如QQ,游戏,IDEA

一个进程可以有多个线程,如视频中同时可以听到声音,看到图像和弹幕等等

程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。

进程(Process):进程是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位。

通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位。

注意:很多多线程是模拟出来的,真正的多线程是指有多个CPU,即多核,如服务器。

   如果是模拟出来的多线程,即在一个CPU的情况下,在同一时间点,CPU只能执行一个代码,因为切换的很快,所有就有同事执行的错觉。

线程核心概念

  • 线程是独立的执行路径
  • 在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,GC线程
  • main()称之为主线程,为系统的入口,用于执行整个程序
  • 在一个进程中,如果开辟了多个线程,线程的运行由调度器(CPU)安排调度,调度器是与操作系统紧密相关的,先后顺序是不能人为的干预
  • 对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制。
  • 线程会带来额外的开销,如CPU调度时间,并发控制开销
  • 每个线程在自己的工作内存交互,内存控制不当会造成数据不一致

2.线程创建

线程创建的三种方式

  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable接口

1.继承Thread

  • 自定义线程类继承Thread
  • 重写run()方法,编写线程执行体
  • 创建线程对象,调用start()方法启动线程
 1 /*
 2 * 创建线程方式一:继承Thread类,重写run()方法,调用start开启线程
 3 * */
 4 public class TestThread1 extends Thread{
 5     @Override
 6     public void run() {
 7         //run方法线程体
 8         for (int i = 0; i < 200; i++) {
 9             System.out.println("我在看代码--"+i);
10         }
11     }
12 
13     public static void main(String[] args) {
14         //main线程  主线程
15         //创建一个线程对象
16         TestThread1 testThread1 = new TestThread1();
17         //调用start()方法开启线程
18         testThread1.start();
19         for (int i = 0; i < 1000; i++) {
20             System.out.println("我在学习多线程"+i);
21         }
22     }
23 }

技术分享图片说明两个线程是同时执行的

线程不一定立即执行,CPU安排调度

Process

多线程详解

原文:https://www.cnblogs.com/lxzlovewyq/p/13681917.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!