java线程(一)
java线程基础
什么是线程?
这里引用百度百科的一句话:“线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。”,简单来说线程cpu执行程序调度的最小单元。cpu通过调用执行一个个线程来促使程序能够正常运行。
线程、进程、应用程序之间的关系
在操作系统中一个进程就代表一个应用程序,如果将一个应用程序看做成一个实体的话,那进程就是一个正在运行的实体。一个应用程序中可以包含多个线程,同样进程中也可以包含多个线程,多个线程的组合称为了一个应用程序,如果一个应用程序中只有一个线程时,那改线程就是一个用用程序,我们称之为单线程程序!
java中如何创建线程
在java中有两种创建线程的方式,一种是实现Runnable接口的run()方法并将其对象实例传入Thread构造中来创建线程,一种是扩展Thread类的run方法来创建线程
new Thread(new Runnable() {
public void run() {
//省略该线程要执行的代码
}
}).start();
实现Runnable接口的方式
new Thread(){
@Override
public void run() {
//省略该线程要执行的代码
super.run();
}
}.start();
扩展Thread类的方式
Thread类是java API提供的线程类,其通过start()方法来启动线程,在线程启动后执行run()方法中的代码,当run()方法中的代码执行完成后线程结束。在以上两种创建线程的方式中推荐使用实现Runnable接口的方式创建线程,因为这种方式更符合面向对象思想,且不会破坏java API原有代码的设计结构,扩展Thread类的方式不仅破坏了Java API原有的设计结构且不符合面向对象的设计思想。而且在Thread类的原始run()方法中也是调用Runable接口的run()方法来实现线程内容代码的调用。


线程的几种状态
线程大致上可以分为五种状态:创建、可运行(就绪)、阻塞(挂起)、运行、死亡。
创建:通过new Thread()来创建线程实例,但未调用start()方法。这时线程的实例已经被创建出来,但并没有启动该线程。
就绪:线程实例创建后调用start()方法。这时线程已经启动,可以被JVM调度交由cpu执行,但cpu目前并没有执行该线程。
运行:线程已经启动,且已被JVM调度交由cpu执行,cpu正在执行该线程。
阻塞:线程在运行时,调用线程对象的sleep()、join()方法或该线程已锁定的监视对象的wait()方法时现场进入阻塞状态,知道达到某种条件后进入就绪状态。
死亡:当线程对象的run()方法执行结束,或在执行过程中出现错误导致线程异常结束,这时线程处于死亡状态。
改变线程状态的几种方法详解
线程对象产生的方法
sleep():sleep方法使线程放弃cpu的使用权进入休眠状态一段时间,这段时间过后线程自动进入就绪状态。
join():join()方法使线程放弃cpu的使用权并加入另一该线程,当另一个线程运行结束进入死亡状态后该线程自动进入就绪状态,否则将一直处于阻塞状态。
yield():yield()方法使线程暂时放弃cpu的使用权进入就绪状态,但由于cpu的调度是随机的无法干预的所以有时yield()方法起不到任何效果。
start():start()方法使线程对象启动进入就绪状态。注意:start()方法只能在线程实例创建后调用一次,当线程进入死亡状态时则无法再调用start()方法使其进入就绪状态。
线程锁定监视对象产生的方法
wait():wait()方法使当前线程放弃cpu的使用权和该对象的锁,进入阻塞状态知道其他线程调用该对象的notify()或notifyall()方法后进入就绪状态。
notify():notify()方法检测该对象上是否有等待的线程,若有一个或多个则随机挑选一个线程使其进入就绪状态。没有则不进行任何操作。
notifyall():notifyall()方法检测该对象上是否有等待的线程,若有则使其全部进入就绪状态。没有则不进行任何操作。
java线程(一)的更多相关文章
- Java线程并发:知识点
Java线程并发:知识点 发布:一个对象是使它能够被当前范围之外的代码所引用: 常见形式:将对象的的引用存储到公共静态域:非私有方法中返回引用:发布内部类实例,包含引用. 逃逸:在对象尚未准备 ...
- Java线程的概念
1. 计算机系统 使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用到的数据复制到缓存中,让计算能快速进行:当运算结束后再从缓存同步回内存之中,这样处理器就无需等待缓慢的内存读写了. 缓 ...
- Java 线程池框架核心代码分析--转
原文地址:http://www.codeceo.com/article/java-thread-pool-kernal.html 前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和 ...
- 细说进程五种状态的生老病死——双胞胎兄弟Java线程
java线程的五种状态其实要真正高清,只需要明白计算机操作系统中进程的知识,原理都是相同的. 系统根据PCB结构中的状态值控制进程. 单CPU系统中,任一时刻处于执行状态的进程只有一个. 进程的五种状 ...
- 【转载】 Java线程面试题 Top 50
Java线程面试题 Top 50 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员 的欢迎.大多数待遇丰厚的J ...
- 第24章 java线程(3)-线程的生命周期
java线程(3)-线程的生命周期 1.两种生命周期流转图 ** 生命周期:**一个事物冲从出生的那一刻开始到最终死亡中间的过程 在事物的漫长的生命周期过程中,总会经历不同的状态(婴儿状态/青少年状态 ...
- 第23章 java线程通信——生产者/消费者模型案例
第23章 java线程通信--生产者/消费者模型案例 1.案例: package com.rocco; /** * 生产者消费者问题,涉及到几个类 * 第一,这个问题本身就是一个类,即主类 * 第二, ...
- 第22章 java线程(2)-线程同步
java线程(2)-线程同步 本节主要是在前面吃苹果的基础上发现问题,然后提出三种解决方式 1.线程不安全问题 什么叫线程不安全呢 即当多线程并发访问同一个资源对象的时候,可能出现不安全的问题 对于前 ...
- 第21章 java线程(1)-线程初步
java线程(1)-线程初步 1.并行和并发 并行和并发是即相似又有区别: 并行:指两个或者多个事件在同一时刻点发生. 并发:指两个或多个事件在同一时间段内发生 在操作系统中,并发性是指在一段事件内宏 ...
- [转]Java线程安全总结
最近想将java基础的一些东西都整理整理,写下来,这是对知识的总结,也是一种乐趣.已经拟好了提纲,大概分为这几个主题: java线程安全,java垃圾收集,java并发包详细介绍,java profi ...
随机推荐
- CSS规范 - 命名规则
使用类选择器,放弃ID选择器 ID在一个页面中的唯一性导致了如果以ID为选择器来写CSS,就无法重用. NEC特殊字符:"-"连字符 "-"在本规范中并不表示连 ...
- JS停止事件冒泡
..停止事件冒泡 JavaScript代码 //如果提供了事件对象,则这是一个非IE浏览器 if ( e && e.stopPropagation ) //因此它支持W3C的stopP ...
- iOS开发之状态栏
从iOS7开始,状态栏默认情况下归控制器管理,比如状态栏的样式.状态栏的是否可见 控制器通过重写以下方法来控制状态栏 设置状态栏的样式,只需重写下列方法即可: - (UIStatusBarStyle) ...
- (转)crontab安装(command not found)
1. 确认crontab是否安装:执行 crontab -l 命令如果报 command not found,就表明没有安装 2. 安装 crontab执行 yum install -y vixie- ...
- css基本布局
一.一列布局 关键代码: { width:960; margin:0 auto: } 代码: 运行结果: 分析:以上代码实现一列布局,头部占整个浏览器 ...
- 使用关系型数据库作为Redis落地的思路
Redis的持久化方式主要有2种:RDB和AOF,但各有不足,同时Redis没有SQL支持,Redis本身提供的命令不足以实现大多数SQL查询需求,对后期运营的分析需求支撑不足.此外,对于游戏来说,活 ...
- 老李分享:接电话之uiautomator 2
case解释 首先要了解进入uiwatcher方法中的机制,是在你某个控件找不到的情况下会进入.但是你得保证进入以后处理完来电界面以后,这条case得保证正确,那么说明回来以后这个控件要能找到.刚开始 ...
- 开启 .NET Core 的新篇章
今天开始要开始研究.net core了 规划了一下要学习的点: 1.CentOS7 2.asp.net Core 3.Linux的常用命令与运维 4.nginx的常用配置 5.mysql的使用与日常维 ...
- WPF自定义控件(2)——图表设计[1]
0.小叙闲言 除了仪表盘控件比较常用外,还有图表也经常使用,同样网上也有非常强大的图表控件,有收费的(DEVexpress),也有免费的.但我们平时在使用时,只想简单地绘一个图,控件库里面的许多功能我 ...
- Android 调出和隐藏软键盘
1.弹出软键盘 public static void showSoftInputMode(Context context,View windowToken) { final InputMethodMa ...