线程基础知识点细叙

  现在到了一个很多东西经常用,但其中原理与概念却是模糊的。这也是填鸭式学习的一个后遗症,因此需要用地毯式的搜索来补缺补差。

因此现在也就线程这方面的知识来捋一捋相关的基础概念原理吧。

  对于一个知识点的学习毋庸置疑肯定首先需要弄清其概念与工作原理。谈到线程,或许会想到进程,这两者的区别又是什么呢?

什么是进程?

  进程就是应用程序的执行实例,有独立的内存空间和系统资源。而任务管理器中的那些运行的应用程序就是很常见的进程了。例如:QQ,浏览器等

特点:(总结其特定可以想成该进程就是电脑中的应用程序)

  1.动态创建开启,动态关闭消亡。

  2.并发执行,即打开电脑中的QQ时也能运行电脑中的浏览器。

  3.各个进程都是独立的,一个QQ的状态并不影响浏览器的状态。

什么是线程?

  线程就是进程内部的独立执行单位。真正在CPU上运行的是线程。

例如:用迅雷下载电视剧,此时迅雷就是一个进程,而在其中下的那些电视剧的任务就是线程。

特点:

  1.线程是占用进程的资源与空间,而不是特定从计算机中给他分配系统资源与内存空间。

  2.同一时间只能有一个线程独立运行,多线程是靠抢占的方式获得执行机会。
  3.一个线程可以创建或删除另一个线程。

多线程的优点:

  1.很大程度上提高了计算机的系统利用效率

  2.充分利用了带宽。

线程分类:

  1.系统级线程    2.用户级线程

关于线程的创建与启动

  在Java中创建线程有两种方式:(该两种方式都不需要导包)

    1.继承java.lang.Thread 类     2.实现java.lang.Runnable接口

1.继承Thread类创建线程

2.实现java.lang.Runnable接口

为什么启动线程是调用start()方法而不是run()方法?

  首先需明确线程创建完毕后,启动线程是调用start()方法而不是run()。因为如果调用是run()方法,则只是将MyThread(MyThread2)

作为一个普通类来调用而已,不会创建线程类。而调用 start()方法,则是将MyThread(MyThread2)作为一个线程类创建来调用,

此时通过调用start()方法内部再会调用线程类里面的run()方法。

注:调用了start()方法只能说明该线程处于可运行状态,需要抢占才可执行

这两种创建线程方式的区别(继承Thread类,实现Runnable接口):

  1.当使用继承是为了不必要的重新开放,通过继承Thread直接拥有父类中的特征。缺点就是但由于Java是单根继承,因此继承Thread的类由于需求

想再继承其他类就不行了。因此在代码的重塑性会差些

  2.当使用实现是面向接口编程,对于代码扩展性要强一些,实现了Runnable接口同时还可以继承其他类。但启动调用的时候比继承方式要麻烦一点

实现方式可以new同一个Thread创建多个线程,且多个线程共享该Runnable资源。

一般情况下我们会使用通过实现Runnable接口来创建多线程

实现Runnable接口相对于继承Thread类来说,有如下的显著优势:
   1.适合多个相同代码的线程去处理同一个资源的情况
   2.可以避免由于java的单继承特性带来的局限
   3.增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的

线程状态:(生命周期)

1.新生状态,即  当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。

2.可运行状态,即调用start()方法后变成可以被执行的状态

3.阻塞状态,即由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。

    正在睡眠:用sleep(long t) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。

    正在等待:调用wait()方法。(调用motify()方法回到就绪状态)

    被另一个线程所阻塞:调用suspend()方法。(调用resume()方法恢复)

4.死亡状态:即当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。

    自然终止:正常运行run()方法后终止

    异常终止:调用stop()方法让一个线程终止运行

多线程运行机制:是可运行状态下的线程通过抢占资源获取执行机会,因此线程的运行跟系统与硬件配置有关,其结果也会不一样。

线程的调度:多线程处于可运行状态

  优先级:反映线程的重要与紧急程度

线程优先级用1—10表示,10的优先级最高,通过优先级默认值为5

  更改优先级:setPriorty(int grade)

join()  让调用join的线程加入

sleep(); 让线程阻塞一段时间再运行

注意:main方法本身就是一个线程,一个进程中可以有多个线程,但至少包含一个主线程,main方法就是一个主线程

创建线程是创建主线程之外的线程。

  

时间: 2024-10-11 07:43:39

线程基础知识点细叙的相关文章

Java 线程基础

目录 Java 线程基础  一.线程简介  二.线程基本用法  三.线程间通信  四.线程状态  参考资料 Java 线程基础 ?? 本文以及示例源码已归档在 javacore 一.线程简介 什么是进程 什么是线程 进程和线程的区别 二.线程基本用法 创建线程 线程休眠 线程礼让 终止线程 守护线程 FAQ 三.线程间通信 wait/notify/notifyAll join 管道 四.线程状态 参考资料 一.线程简介 什么是进程 简言之,进程可视为一个正在运行的程序.它是系统运行程序的基本单位

线程基础:JDK1.5+(8)——线程新特性(上)

1.概要 如果您阅读JAVA的源代码,出现最多的代码作者包括:Doug Lea.Mark Reinhold.Josh Bloch.Arthur van Hoff.Neal Gafter.Pavani Diwanji等等.其中java.util.concurrent包中出现的基本都是Doug Lea的名字.Doug Lea,是对Java影响力最大的个人,直接贡献的设计包括java的Collections和util.concurrent. JDK1.5中一个重要特性就是util.concurrent

.NET基础知识点

.NET基础知识点   l  .Net平台  .Net FrameWork框架   l  .Net FrameWork框架提供了一个稳定的运行环境,:来保障我们.Net平台正常的运转   l  两种交互模式 C/S:要求客户的电脑上必须要安装一个客户端:qq.360.快播等..... B/S:要求客户的电脑上只需要安装一个浏览器   l  书写代码需要注意的地方: n  代码中出现的所有标点都是英文半角 shift键快速切换中文半角和英文半角 n  shift+空格切换全角/半角 n  在c#代

JAVA基础知识点总结(全集)

1.JAVA简介 1.1java体系结构:j2se,javaweb,j2ee 1.2java特点:平台无关(虚拟机),垃圾回收(使得java更加稳定) 1.3 JDK与JRE,JDK:java开发环境,JRE:java运行环境 1.4第一个java程序:HelloWorld,java的入口是main(public static void main(String[] args)) 1.5java程序的开发步骤:.java编译(javac)成.class运行(java).class文件 2.基本数据

线程基础知识系列(二)线程的管理

本篇是线程基础知识系列的第二篇,主要简单江夏线程管理相关知识点. 线程基础知识系列(一)线程的创建和启动:说明了线程的2种创建和启动,join(),daemon线程,Callable 任务. 本文的主要内容 线程的状态 线程的优先级 sleep vs wait 线程的流程控制 Interrupt yield让出你的CPU 1.线程的状态 以<线程基础知识系列(一)线程的创建和启动>这张图,是程序的运行时线程信息截图.有main线程,user Threads,daemon Threads.现在咱

线程基础:线程池(7)——基本使用(下)

(接上文<线程基础:线程池(6)--基本使用(中)>,我要加快进度,以便在2月份恢复"系统间通信技术"专栏的写作) 5.扩展ThreadPoolExecutor线程池 实际上JAVA中提供的ThreadPoolExecutor线程池是鼓励各位程序员进行扩展的(虽然大多数情况下您无需扩展),并且JBOSS(Netty).Apache(Camel)也正是这样在做.下面我们看看一些由ThreadPoolExecutor提供的扩展方式. 5-1.Hook methods 在Thre

线程基础:JDK1.5+(10)——线程新特性(下)

(接上文<线程基础:JDK1.5+(9)--线程新特性(中)>) 3-4.CountDownLatch:同步器 上文中我们主要讲解了JDK1.5+中提供的一个重要工具:Semaphore信号量,并且用这个工具第一次实现了"100米赛跑"的需求.在第一次的实现中,我们还运用了"线程专栏"中已介绍的多个知识点,包括锁.线程池.队列.Callable接口等. 但实际上第一次实现的"100米赛跑"的需求,离我们真正的需求还有一定的距离:在我们

线程基础:JDK1.5+(9)——线程新特性(中)

(接上文<线程基础:JDK1.5+(8)--线程新特性(上)>) 3.工作在多线程环境下的"计数器": 从这个小节開始,我们将以一个"赛跑"的样例.解说JDK1.5环境下一些线程控制工具(包含Semaphore.CountDownLatch和java.util.concurrent.atomic子包),而且复习这个专题讲到的知识点:同步快.锁.线程池.BlockingQueue.Callable等. 3-1. 赛跑比赛的需求 如今您不仅能够通过我们已经介

Android基础知识点总结

Android基础知识点总结 在学习了很长一段时间的Android基础内容,如果不做及时的复习,那么后面的项目学习起来可能就没那么顺利了,并且复习也是一件很愉快的事.古人有云:"学而时习之不亦说乎",应该就是这个道理. ~本文大纲~ Android基础知识点总结 Day01 01Android系统中我们常用的4种数据存储方式 02获取手机内存空间大小 03XML文件的生成和解析 GET新技能 Day02 SQLiteOpenHelper的基本用法 数据库事务 Listview的简单优化