java线程与并发(二)
一般而言,线程通常有以下的这么几个状态:
创建状态:准备好了一个多线程操作对象
就绪状态:调用了start()方法,等待CPU调度
运行状态:执行run()方法,正在运行
阻塞状态:暂时停止执行,把资源给其他线程调用
终止状态:线程执行完毕,不再使用。
线程的常用操作
取得和设置线程的名称
对于一个线程,我们可以使用getName()和setName()
一般我们会在线程启动之前给线程起名,但是线程运行之后,我们也是可以给予线程名称的。
两个线程是可以重名的,如果我们没有给线程起名,那么java会自动分配一个名字给这个线程。
也可以通过构造方法给线程一个名字。
通过currentThread方法可以取得当前的线程对象
Thread. currentThread().getName();
各个方法中main主方法其实本身其实也是一个线程。
所以启动一个java程序至少启动了两个线程。
我们还可以通过isAlive()来看这个线程是否是存活的。
在线程操作中,我们还可以通过join()方法对线程进行强制运行,在一个线程强制运行前,其他的线程无法运行。必须要等待这个线程运行完毕之后,才能运行。
在一个线程的run()方法中使用Thread.sleep(time)可以让线程休眠。
这个方法需要捕获异常
同时,通过这个interrupt()方法 会中断线程执行。
threadName. Interrupt()
启动后台线程,使用setDaemon(boolean)方法
这样即使java被关闭了,这个程序依然会在运行。
在java中线程的执行是有优先级。
这里有三个等级
MAX_PRIORITY 最高优先级
NORM_PRIORITY 中等优先级
MIN_PRIORITY 最低优先级
threadName. SetPriority()来设置线程的优先顺序
main方法对应的优先级是NORM_PRIORITY
这里还有一个方法可以让当前的线程操作让给其他线程(应该是降低它的优先级吧。。。)
在主方法中
Thread.currentThread().yield()
同步的死锁
在多线程开发中,同步和死锁是很重要的概念。
所谓是同步就是多个线程操作在一个时间内只能一个线程来使用。其他线程要等待这个线程完成之后才可能继续执行。
同步代码块 使用synchronized关键字来声明
同步代码块格式
Synchronized(同步对象){
需要同步的代码;
}
在一个类中,可以使用this关键字来声明一个需要同步的代码块。
但是这样做,效率突然降低了很多。
同时我们也可以把一个方法声明为一个同步的方法。
Public synchronized void funName(){
//code
}
java线程与并发(二)的更多相关文章
- Java 线程池(二)
简介 在上篇 Java 线程池(一) 我们介绍了线程池中一些的重要参数和具体含义,这篇我们看一看在 Java 中是如何去实现线程池的,要想用好线程池,只知其然是远远不够的,我们需要深入实现源码去了解线 ...
- Java线程的并发工具类
Java线程的并发工具类. 一.fork/join 1. Fork-Join原理 在必要的情况下,将一个大任务,拆分(fork)成若干个小任务,然后再将一个个小任务的结果进行汇总(join). 适用场 ...
- java线程与并发(一)
有好几个月没写博客了,各种破事儿忙完,决定继续写博客,恰好最近想了解下有关Java并发的一些知识,所以就准备这一段时间,用零碎的时间多记录一点有关并发的知识.希望这次能一直坚持下去. 想了解并发,必须 ...
- java线程池技术(二): 核心ThreadPoolExecutor介绍
版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程池技术属于比较"古老"而又比较基础的技术了,本篇博客主要作用是个人技术梳理,没什么新玩意. 一.Java线程池技术的 ...
- java线程高并发编程
java线程具体解释及高并发编程庖丁解牛 线程概述: 祖宗: 说起java高并发编程,就不得不提起一位老先生Doug Lea,这位老先生可不得了.看看百度百科对他的评价,一点也不为过: 假设IT的历史 ...
- JAVA线程同步 (二)notify()与notifyAll()-***
编写多线程程序需要进行线程协作,前面介绍的利用互斥来防止线程竞速是来解决线程协作的衍生危害的.编写线程协作程序的关键是解决线程之间的协调问题,在这些任务中,某些可以并行执行,但是某些步骤需要所有的任务 ...
- 深入Java线程管理(二):线程的生命周期
Java线程的生命周期 一个线程的产生是从我们调用了start方法开始进入Runnable状态,即可以被调度运行状态,并没有真正开始运行,调度器可以将CPU分配给它,使线程进入Running状态,真正 ...
- java 线程安全并发Queue
并发Queue 在并发的队列上jdk提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论在那种都继承自Qu ...
- (删)Java线程同步实现二:Lock锁和Condition
在上篇文章(3.Java多线程总结系列:Java的线程同步实现)中,我们介绍了用synchronized关键字实现线程同步.但在Java中还有一种方式可以实现线程同步,那就是Lock锁. 一.同步锁 ...
随机推荐
- Ubuntu Server安装R和Rstudio(zz)
Ubuntu Server安装R和Rstudio 发表于 技术天堂 2014-03-15 21:03 字数: 534 阅读量: 205 R是一个在科研领域很常用的工具,经常用R的年轻人或者经常上统计之 ...
- DIV+CSS:页脚永远保持在页面底部
页脚永远保持在页面底部 有时候,我们用CSS创建一个高度自适应布局,如何保证页脚(footer)在内容不超过一屏的情况下始终保持在布局最下方是一个比较头疼的事.我看过一些利用绝对定位的例子,但总感觉不 ...
- 安装Openfile环境和组件XMPP
打开ProFTPD和Apache Web Server 安装Openfile 在系统偏好设置中打开Openfile,开启Openfile状态 在safair浏览器中输入127.0.0.1:9090 配 ...
- POST 500 Internal Server Error
今天调试公司web后台时发现一个POST 500 Internal Server Error的错误. 本来VS本地调试没有发现这个问题,然后发布到服务器时才出现了.然后找了好久没找到什么原因,再仔细在 ...
- Linux操作系统安装JDK
1.利用winSCP将要安装的jdk包传到Linux上. 2.命令 tar -zxvf [jdk的安装包],安装包须是tar的包才行. ep:tar -zxvf server-jre-7u80-lin ...
- Python小练习二
# 以正确的宽度在居中的"盒子"内打印一个句子 # 注意,整数除法运算符(//)只能用在Python 2.2及后续版本,在之前的版本中,只使用普通除法(/) sentence = ...
- java抽象语法
1.基本概念: 0.0.抽象类的定义:抽象类是为子类提供一个规范,其目地是由子类去继承实现(类似国家提出的法律,由我们去执行). 0.1.定义抽象类用abstract来定义. 语法: public a ...
- angular JS 做分页
在网上找了一天,连一个像样点的分页DEMO都没找到,晕死了.大部分都是相互抄,有各种各样的问题,要不是代码有BUG,要不就是解释不明,GITHUB上下载下来的总是乱糟糟的.心累.
- AKI
KDIGO 2012定义:尿量<0.5ml/kg/h 6h+:scr上升50%+ 7d-:scr上升26.5 2d- 但面对录入窗口,又想不出说什么了,继续看aki?刚才想的是什么呢?入冬,好像 ...
- Websocket Component
As of Camel 2.10, the Websocket component supports SSL/TLS configuration through the Camel JSSE Conf ...