Java基础 - 线程(一)
一、什么是线程
首先,介绍一下线程、进程的概念。
进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元。进程是指运行中的应用程序,Windows任务管理器进程窗口看到的每一项都是一个进程。每运行一个程序,系统就会启动一个线程并为它分配一个独立的内存空间。

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,是进程的执行单元、执行路径。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器、栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
二、线程的生命周期:
1、 初始:创建线程对象,但还没调用start()方法。
2、 就绪:调用start()方法,有执行资格,但是没有执行权。
3、 运行:系统调用,获得CPU时间片,有执行资格,有执行权。
4、 阻塞:由于一些操作让线程暂停,一般是被动的,抢占不到资源,被动的挂起在内存,释放CPU,不释放内存。等待其他操作将他唤醒,唤醒后处于就绪状态。
5、 死亡:线程执行完毕,线程的run()方法或主线程的main()方法完成,就认为它终止了,线程对象变成垃圾,等待被回收。

三、线程使用方法
1、继承Thread类,重写run方法

2、实现Runnable接口,重写run方法

3、通过Callable和FutureTask创建线程
创建Callable接口的实现类,并实现call()方法。并使用FutureTask类来包装Callable实现类的对象,且以此FutureTask对象作为Thread对象的target来创建线程。




Future代表一个异步计算的结果。接口中的方法用来检查计算是否完成、等待完成和得到计算的结果。当计算完成后,只能通过get()方法得到结果,get方法会阻塞直到结果准备好了。如果想取消,那么调用cancel()方法。其他方法用于确定任务是正常完成还是取消了。一旦计算完成了,那么这个计算就不能被取消。

4、通过线程池创建线程

ExecutorService属于Executor框架,Java通过Executors提供一系列工厂方法创建线程池,返回的线程池都实现了ExecutorService接口。方法如下:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
Java基础 - 线程(一)的更多相关文章
- Java基础-线程安全问题汇总
Java基础-线程安全问题汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存泄漏和内存溢出(out of memory)的区别 1>.什么是内存溢出 答:内存溢出指 ...
- Java基础-线程操作共享数据的安全问题
Java基础-线程操作共享数据的安全问题 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.引发线程安全问题 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运 ...
- Java基础——线程总结
Java基础--线程总结 一.线程是什么? 线程:一个程序里不同的运行路径. 二.怎样创建线程? 两种方法创建线程: 第一种 (1)定义详细功能类实现Runnable接口,能够多次调用而实现数据共享 ...
- 《Java基础——线程类》
Java基础--线程类 一.线程的创建之Thread类: 规则: 通过声明一个新类作为子类继承 Thread 类,并复写 run() 方法,就可以启动新线程并执行自己定义的 run()方法 ...
- JAVA基础—线程池
推荐文章java多线程基础 线程池概述 为什么要使用线程池 1.服务器创建和销毁工作线程的开销很大 2.如果频繁的创建和销毁线程会导致频繁的切换线程,因为一个线程被销毁后,必然要把CPU转让给另一个已 ...
- java基础—线程(一)
一.线程的基本概念
- java基础—线程(二)
一.线程的优先级别
- Java基础--线程创建方式
线程的创建主要有两种形式,通过继承Thread或者实现Runnable接口,本质上没有太大区别. /** * @date: 2019/7/16 **/ public class ThreadOne i ...
- Java基础-线程与并发1
线程与并发 Thread 基本概念 程序: 一组计算机能识别和执行的指令 ,是静态的代码. 进程: 程序的一次运行活动, 运行中的程序 . 线程: 进程的组成部分,它代表了一条顺序的执行流. 进程线程 ...
- 面试题-Java基础-线程部分
1.进程和线程的区别是什么? 进程是执行着的应用程序,而线程是进程内部的一个执行序列.一个进程可以有多个线程.线程又叫做轻量级进程. 2.创建线程有几种不同的方式?你喜欢哪一种?为什么? 有三种方式可 ...
随机推荐
- c# sshnet控制linux 使用unzip的一些问题
无法使用unzip 解压缩 linux文件夹下的zip文件 于是想在win下生成一个 shell 文件传到linux 下运行,结果这个sh文件在linux 运行时出错,同样的文件在linux下生成就 ...
- application/json和application/x-www-form-urlencoded使用选择
一.参考资料 选application/x-www-form-urlencoded还是application/json? @RequestBody应用 二.理解 1.@RequestBody的作用 注 ...
- CSS的六大选择器
选择器:选择器是一种模式,用于选择需要添加样式的元素. 首先简述六大选择器 基本选择器 标签选择器 类选择器 ID选择器 高级选择器 层次选择器 结构伪类选择器 属性选择器 其中基本选择器与层次选择器 ...
- 使用GO开发ChainCode
本来不会GO,最近突击学了些GO的基础,就开始搞chaincode了. 首先给大家推荐一个非常好的Hyperldeger Fabric项目 marble:https://github.com/ibm- ...
- zeromq学习记录(五)vc下多线程
/************************************************************** 技术博客 http://www.cnblogs.com/itdef/ ...
- C语言基础课第二次作业
一. 题目7-1 统计学生成绩 1.实验代码 #include<stdio.h> int main(void) { int i,grade,n; ,b=,c=,d=,e=; scanf( ...
- for循环的实例
1.大马驮2石粮食,中马驮1石粮食,两头小马驮一石粮食,要用100匹马,驮100石粮食,该如//首先我们要知道一百石粮食需要这些马分别几匹 //第一个是大马,需要五十匹马for(var x=0;x&l ...
- 第34 memcached缓存
1.缓存数据库 缓存:将数据存储在内存中,只有当磁盘胜任不了的时候,才会启用缓存. 缺点:断电数据丢失(双电),用缓存存储数据的目的只是为了应付大并发的业务,至于数据存储及可靠性不要找他了. 数据 ...
- MySQL 三 二进制安装
二进制格式安装 何谓二进制格式安装? 二进制格式安装,编译好的打包在tar文件里,安装时需要下载后解包至编译时指定的位置,然后进行相关配置,完成安装 版本信息:CentOS 7.4 安装m ...
- httpd-vhosts.conf配置
<VirtualHost 127.0.0.1:80> ServerName zjm.appems.com DocumentRoot E:\qian\web <Directory &q ...