线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。

每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。

当 Java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指定类的 main 方法)。Java 虚拟机会继续执行线程,直到下列任一情况出现时为止:

  • 调用了 Runtime 类的 exit 方法,并且安全管理器允许退出操作发生。
  • 非守护线程的所有线程都已停止运行,无论是通过从对 run 方法的调用中返回,还是通过抛出一个传播到 run 方法之外的异常。

创建新执行线程有两种方法。一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。例如,计算大于某一规定值的质数的线程可以写成:

由于Java是纯面向对象语言,因此,Java的线程模型也是面向对象的。Java通过Thread类将线程所必须的功能都封装了起来。要想建立一个线程,必须要有一个线程执行函数,这个线程执行函数对应Thread类的run方法。Thread类还有一个start方法,这个方法负责建立线程,相当于调用Windows的建立线程函数CreateThread。当调用start方法后,如果线程建立成功,并自动调用Thread类的run方法。因此,任何继承Thread的Java类都可以通过Thread类的start方法来建立线程。如果想运行自己的线程执行函数,那就要覆盖Thread类的run方法。

在Java的线程模型中除了Thread类,还有一个标识某个Java类是否可作为线程类的接口Runnable,这个接口只有一个抽象方法run,也就是Java线程模型的线程执行函数。因此,一个线程类的唯一标准就是这个类是否实现了Runnable接口的run方法,也就是说,拥有线程执行函数的类就是线程类。

从上面可以看出,在Java中建立线程有两种方法,一种是继承Thread类,另一种是实现Runnable接口,并通过Thread和实现Runnable的类来建立线程,其实这两种方法从本质上说是一种方法,即都是通过Thread类来建立线程,并运行run方法的。但它们的大区别是通过继承Thread类来建立线程,虽然在实现起来更容易,但由于Java不支持多继承,因此,这个线程类如果继承了Thread,就不能再继承其他的类了,因此,Java线程模型提供了通过实现Runnable接口的方法来建立线程,这样线程类可以在必要的时候继承和业务有关的类,而不是Thread类。

转载于:https://www.cnblogs.com/verkey/archive/2012/11/03/thread.html

java基础之线程(1)相关推荐

  1. Java基础之线程池

    Java基础之线程池 转载于:https://www.cnblogs.com/daierge/p/10954228.html

  2. (CZ深入浅出Java基础)线程笔记

    这是刘意老师的JAVA基础教程的笔记 讲的贼好,附上传送门 传智风清扬-超全面的Java基础 一.线程的引入 1.多线程概述 进程 a.正在运行的程序,是系统进行资源分类和调用的独立单位. b.每个进 ...

  3. Java基础拾遗:线程相关问题

    在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.要注意的是Thread类也实现了Runnable接口,因此,从Thread类继承的类的实例也可以作为target传入这个构 ...

  4. java线程三种方法,Java基础_线程的使用及创建线程的三种方法

    线程:线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 进程:进 ...

  5. Java基础复习---线程创建

    2019独角兽企业重金招聘Python工程师标准>>> Java提供了两种线程创建的方法: 1.Java中线程的创建 a.继承Thread类 public class Extends ...

  6. Java基础15-多线程

    1. 多线程 1.1 概念 多线程就是指一个进程中同时有多个线程正在执行. 1.2 程序.进程.线程的区别 说起进程,就不得不说下程序.程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态 ...

  7. java基础之线程概述_繁星漫天_新浪博客

    在学习线程前,我们先来学习一下进程. 进程 在一个操作系统中,每个独立执行的程序都可称为一个进程,也就是"正在运行的程序". 在计算机中,所有的应用程序都是由cpu执行的,对于一个 ...

  8. Java基础:线程池

    第一章 等待唤醒机制 1.1 线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B ...

  9. 【Java基础】线程阻塞的方法

    Thread.sleep()和Object.wait()的区别 (1)Thread.sleep()不会释放占有的锁,Object.wait()会释放占有的锁: (2)Thread.sleep()必须传 ...

最新文章

  1. 前端基础-HTML标记语言
  2. 求一个数的阶乘值c语言代码,求10000的阶乘(c语言代码实现)
  3. 反汇编基础-MSVC2012,2008,MinGw中控制台main函数入口特征
  4. TypeScript入门教程 之 生成器函数
  5. LCT模板(无讲解)
  6. 3682: Phorni 后缀平衡树 线段树
  7. Flask 应用最佳实践
  8. 如何使用postman测试服务器的性能,如何用Postman测试API
  9. 搞了很久终于突破了一点瓶颈,fighting!!!!!!!!!!!!!!!!
  10. javascript实现文件下载
  11. java会导致蓝屏么_电脑经常会蓝屏?可能是这些原因导致的
  12. excel制作折线图
  13. java随机不重复点名_怎样用java做一个点名器,除重复,并且用键盘输入
  14. druiddatasource 方法_DruidDataSource详解(一)
  15. 香港保险和内地保险的利与弊,有什么区别?
  16. 开源美狐美颜SDK功能代码分析
  17. (byte)0xaa 0xff
  18. 团队评分标准和评分结果
  19. 既有内网又有外网的网络如何设置路由器模式
  20. 迈瑞BC5800出图

热门文章

  1. 使用Spring框架能带来那些好处?
  2. Python Matplotlib.plot Update image Questions
  3. HTML中放置CSS的三种方式和CSS选择器
  4. Servlet基础知识(二)——web.xml文件的作用
  5. ASP.NET MVC3 中的AJAX
  6. C#实现简单WEB服务器
  7. Linux命令替换字符串
  8. 聊聊毕业设计系列 --- 系统实现
  9. jsp+easyui+DataGrid 例子
  10. day16-Dom提交表单以及其他