java基础之线程(1)
线程 是程序中的执行线程。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)相关推荐
- Java基础之线程池
Java基础之线程池 转载于:https://www.cnblogs.com/daierge/p/10954228.html
- (CZ深入浅出Java基础)线程笔记
这是刘意老师的JAVA基础教程的笔记 讲的贼好,附上传送门 传智风清扬-超全面的Java基础 一.线程的引入 1.多线程概述 进程 a.正在运行的程序,是系统进行资源分类和调用的独立单位. b.每个进 ...
- Java基础拾遗:线程相关问题
在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.要注意的是Thread类也实现了Runnable接口,因此,从Thread类继承的类的实例也可以作为target传入这个构 ...
- java线程三种方法,Java基础_线程的使用及创建线程的三种方法
线程:线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 进程:进 ...
- Java基础复习---线程创建
2019独角兽企业重金招聘Python工程师标准>>> Java提供了两种线程创建的方法: 1.Java中线程的创建 a.继承Thread类 public class Extends ...
- Java基础15-多线程
1. 多线程 1.1 概念 多线程就是指一个进程中同时有多个线程正在执行. 1.2 程序.进程.线程的区别 说起进程,就不得不说下程序.程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态 ...
- java基础之线程概述_繁星漫天_新浪博客
在学习线程前,我们先来学习一下进程. 进程 在一个操作系统中,每个独立执行的程序都可称为一个进程,也就是"正在运行的程序". 在计算机中,所有的应用程序都是由cpu执行的,对于一个 ...
- Java基础:线程池
第一章 等待唤醒机制 1.1 线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B ...
- 【Java基础】线程阻塞的方法
Thread.sleep()和Object.wait()的区别 (1)Thread.sleep()不会释放占有的锁,Object.wait()会释放占有的锁: (2)Thread.sleep()必须传 ...
最新文章
- 前端基础-HTML标记语言
- 求一个数的阶乘值c语言代码,求10000的阶乘(c语言代码实现)
- 反汇编基础-MSVC2012,2008,MinGw中控制台main函数入口特征
- TypeScript入门教程 之 生成器函数
- LCT模板(无讲解)
- 3682: Phorni 后缀平衡树 线段树
- Flask 应用最佳实践
- 如何使用postman测试服务器的性能,如何用Postman测试API
- 搞了很久终于突破了一点瓶颈,fighting!!!!!!!!!!!!!!!!
- javascript实现文件下载
- java会导致蓝屏么_电脑经常会蓝屏?可能是这些原因导致的
- excel制作折线图
- java随机不重复点名_怎样用java做一个点名器,除重复,并且用键盘输入
- druiddatasource 方法_DruidDataSource详解(一)
- 香港保险和内地保险的利与弊,有什么区别?
- 开源美狐美颜SDK功能代码分析
- (byte)0xaa 0xff
- 团队评分标准和评分结果
- 既有内网又有外网的网络如何设置路由器模式
- 迈瑞BC5800出图