一、

1、优点:

  1. 多线程技术使程序的响应速度更快 ,用户在进行其它工作的同时一直处于活动状态;
  2. 当前没有进行处理的任务时可以将处理器时间让给其它任务;
  3. 占用大量处理时间的任务可以定期将处理器时间让给其它任务;
  4. 可以随时停止任务;
  5. 可以分别设置各个任务的优先级以优化性能。

2、缺点:

  1. 等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源 ,如打印机等。
  2. 对线程进行管理要求额外的 CPU开销。线程的使用会给系统带来上下文切换的额外负担。

线程的死锁。即较长时间的等待或资源竞争以及死锁等多线程症状。

二、两种实现多线程的方式

继承Thread:

  1. 定义一个类继承Thread类
  2. 复写Thread类中的run()方法,将线程的任务代码封装到run方法中
  3. 直接创建Thread的子类对象,创建线程
  4. 调用start()方法,开启线程(调用线程的任务run方法)
  5. 获取线程名称:通过Thread的getName()获取线程的名称。

实现 Runnable接口

1.定义一个类,实现Runnable接口;

2.覆盖接口的run()的方法,将线程的任务代码封装到run方法中;

3.创建Runnable接口的子类对象

4.将Runnable接口的子类对象作为参数传递给Thread类的构造函数

5.调用start()方法,启动线程。

在程序开发中以Runnable为主,因为相比于 Thread,Runnable避免了单继承的局限,一个类可以继承多个接口;另外比较适合于资源的共享。

三、线程的生命周期

1、新建状态:

用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable)。注意:不能对已经启动的线程再次调用start()方法,否则会出现java.lang.IllegalThreadStateException异常。

2、 就绪状态:

处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于线程就绪队列(尽管是采用队列形式,事实上,把它称为可运行池而不是可运行队列。因为cpu的调度不一定是按照先进先出的顺序来调度的),等待系统为其分配CPU。等待状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会从等待执行状态进入执行状态,系统挑选的动作称之为“cpu调度”。一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。提示:如果希望子线程调用start()方法后立即执行,可以使用Thread.sleep()方式使主线程睡眠一伙儿,转去执行子线程

3、 运行状态:

处于运行状态的线程最为复杂,它可以变为阻塞状态、就绪状态和死亡状态。处于就绪状态的线程,如果获得了cpu的调度,就会从就绪状态变为运行状态,执行run()方法中的任务。如果该线程失去了cpu资源,就会又从运行状态变为就绪状态。重新等待系统分配资源。也可以对在运行状态的线程调用yield()方法,它就会让出cpu资源,再次变为就绪状态。当线程的run()方法执行完,或者被强制性地终止,例如出现异常,或者调用了stop()、desyory()方法等等,就会从运行状态转变为死亡状态。

Java:多线程基础相关推荐

  1. Java多线程干货系列(1):Java多线程基础

    转载自  Java多线程干货系列(1):Java多线程基础 前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学 ...

  2. JAVA多线程基础篇-关键字synchronized

    1.概述 syncronized是JAVA多线程开发中一个重要的知识点,涉及到多线程开发,多多少少都使用过.那么syncronized底层是如何实现的?为什么加了它就能实现资源串行访问?本文将基于上述 ...

  3. 爬梯:Java多线程基础

    学习资源:狂神说 Java多线程基础 1.多线程概述 Process 进程 一个进程可以有多个线程. Thread 线程 线程就是独立的执行路径 在程序运行时,即使没有自己创建线程,后台也会有多个线程 ...

  4. java多线程基础学习[狂神说java-多线程笔记]

    java多线程基础学习 一.线程简介 1.类比 2.程序进程线程 3.线程的核心概念 二.线程的实现(重点) 调用方法与调用多线程的区别 Thread 类 1.thread使用方法 2. 代码实现 3 ...

  5. Java多线程干货系列—(一)Java多线程基础

    前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧. 正文 线程与进程 1 线程:进程中负责程序执行的 ...

  6. 一篇文章弄懂Java多线程基础和Java内存模型

    文章目录 一.多线程的生命周期及五种基本状态 二.Java多线程的创建及启动 1.继承Thread类,重写该类的run()方法 2.通过实现Runnable接口创建线程类 3.通过Callable和F ...

  7. java多线程基础视频_【No996】2020年最新 Java多线程编程核心基础视频课程

    01.课程介绍.mp4 02.多线程编程基础-进程与线程.mp4 03.多线程编程基础-使用多线程-继承Thread类.mp4 04.多线程编程基础-使用多线程-实现Runnable接口.mp4 05 ...

  8. Java多线程基础(一)

    文章分两份,第一份主要内容为1-4点 1.多线程的概念 2.Java程序运行原理 3.实现多线程的2种方式 4.2种方式的区别 5.线程同步(同步锁) 6.同步线程之间的通讯 1.多线程的概念 (1) ...

  9. Java多线程基础知识

    多线程基础知识 这是我再次学习多线程知识的一个总结,对于刚刚接触的学习者是比较友好易懂的,便于快速的理解和掌握. 一.基本概念: 1.进程:进程就是运行中的程序,当一个程序开始执行,操作系统就会给这个 ...

  10. 【Java进阶营】JAVA多线程基础学习二:synchronized

    本篇主要介绍Java多线程中的同步,也就是如何在Java语言中写出线程安全的程序,如何在Java语言中解决非线程安全的相关问题,没错就是使用synchronized. 一.如何解决线程安全问题? 一般 ...

最新文章

  1. bzoj 2565: 最长双回文串 manacher算法
  2. matlab在电力行业中的仿真技术-MATLAB小电流接地系统单向故障仿真分析
  3. 德国Renusol进军南非市场 瞄准屋顶光伏
  4. docker基础知识
  5. [js] Geolocation.getCurrentPosition()用来做什么的?在什么浏览器不受兼容?
  6. VMware下Windows Server 2012添加新磁盘
  7. http_build_query()就是将一个数组转换成url 问号?后面的参数字符串,并且会自动进行urlencode处理,及它的逆向函数...
  8. python psutil 获取命令历史_python中系统信息获取psutil使用
  9. 《我是一只IT小小鸟》阅读笔记
  10. SFML/C++二维热传导模拟,热传导方程
  11. 中国止血分析仪行业市场供需与战略研究报告
  12. css display contents
  13. 再见PDF提取收费!我用100行Python代码搞定!去你的收费!
  14. android app如何后台自启动,商家骑手端允许后台运行APP设置方法(安卓)
  15. 推荐四个不错的公众号
  16. String中与获取相关的几个方法
  17. 武汉大学计算机专业网络安全,武汉大学网络空间安全考研科目有哪些?
  18. ls -al 命令详解
  19. 无线控制器 dhcp服务器,H3C无线控制器典型配置案例集(V5)-6W113
  20. JavaScript中linux时间戳与日期的转换

热门文章

  1. Ensemble learning 集成学习(一)
  2. 外媒:天猫国际购物平台碰壁
  3. Bugku:加密 富强民主
  4. vins-mobile
  5. 有关BPSK、QPSK调制信号的通信链路仿真,以及误码分析
  6. 计算机为何如此普遍英语论文,浅谈计算机英语论文
  7. XV6实验-Lab0 Utilities
  8. Web前端 VS Web后端
  9. 电子计算机没电了还可以用吗,电子工程师:手机没电也能用
  10. 系统安装初步之SlackwareLinux软体简介(转)