一般而言,线程通常有以下的这么几个状态:

创建状态:准备好了一个多线程操作对象

就绪状态:调用了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线程与并发(二)的更多相关文章

  1. Java 线程池(二)

    简介 在上篇 Java 线程池(一) 我们介绍了线程池中一些的重要参数和具体含义,这篇我们看一看在 Java 中是如何去实现线程池的,要想用好线程池,只知其然是远远不够的,我们需要深入实现源码去了解线 ...

  2. Java线程的并发工具类

    Java线程的并发工具类. 一.fork/join 1. Fork-Join原理 在必要的情况下,将一个大任务,拆分(fork)成若干个小任务,然后再将一个个小任务的结果进行汇总(join). 适用场 ...

  3. java线程与并发(一)

    有好几个月没写博客了,各种破事儿忙完,决定继续写博客,恰好最近想了解下有关Java并发的一些知识,所以就准备这一段时间,用零碎的时间多记录一点有关并发的知识.希望这次能一直坚持下去. 想了解并发,必须 ...

  4. java线程池技术(二): 核心ThreadPoolExecutor介绍

    版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程池技术属于比较"古老"而又比较基础的技术了,本篇博客主要作用是个人技术梳理,没什么新玩意. 一.Java线程池技术的 ...

  5. java线程高并发编程

    java线程具体解释及高并发编程庖丁解牛 线程概述: 祖宗: 说起java高并发编程,就不得不提起一位老先生Doug Lea,这位老先生可不得了.看看百度百科对他的评价,一点也不为过: 假设IT的历史 ...

  6. JAVA线程同步 (二)notify()与notifyAll()-***

    编写多线程程序需要进行线程协作,前面介绍的利用互斥来防止线程竞速是来解决线程协作的衍生危害的.编写线程协作程序的关键是解决线程之间的协调问题,在这些任务中,某些可以并行执行,但是某些步骤需要所有的任务 ...

  7. 深入Java线程管理(二):线程的生命周期

    Java线程的生命周期 一个线程的产生是从我们调用了start方法开始进入Runnable状态,即可以被调度运行状态,并没有真正开始运行,调度器可以将CPU分配给它,使线程进入Running状态,真正 ...

  8. java 线程安全并发Queue

    并发Queue 在并发的队列上jdk提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论在那种都继承自Qu ...

  9. (删)Java线程同步实现二:Lock锁和Condition

    在上篇文章(3.Java多线程总结系列:Java的线程同步实现)中,我们介绍了用synchronized关键字实现线程同步.但在Java中还有一种方式可以实现线程同步,那就是Lock锁. 一.同步锁 ...

随机推荐

  1. Google Earth API 替换方案

    众所周知,GE API将会在15年12月25日结束服务,对于众多采用该API的软件,需要一些替换方案. 例如google map或者cesiumjs http://cesiumjs.org/ 或者尝试 ...

  2. vs2015 附加到进程找不到w3wp.exe

    vs2015 附加到进程找不到w3wp.exe 解决办法: 浏览器打开你访问的IIS地址后就出现了~!!!!!!!!!

  3. android源码环境下用mmm/mm编译模块,输出编译log到文件的方法

    android源码环境下用mmm/mm编译模块,输出编译log到文件的方法 1,在android目录下直接用mmm命令编译, log信息保存在android目录下 mmm packages/apps/ ...

  4. Freemarket学习整理。

    导入freemarker.jar包 把word文档另存为xml格式,2007以上版本支持. 编写代码,把路径更改为xml所在路径. 把需要更改的地方写成${}形式. package Document. ...

  5. android 应用笔记

    android 应用笔记 android 应用笔记 小书匠 Android 综合教程 Android常用技巧 安卓系统架构 安卓源码开发 安卓驱动 Linux内核 安卓应用开发 Java 教程 tic ...

  6. ORACLE 自动增长通过封装函数,方便调用

    好的编程习惯,是一个很有必要的过程.好的编程习惯,可以因人而异,但是简单地.基本地代码级别的就那些:写注释.合理的缩进.换行.变量命名等. 对我们程序员来说,大部分时间都对着电脑,在对着电脑的大部分时 ...

  7. JavaScript对UNIX时间戳的转换

    <script type="text/javascript"> var timestamp = '1479886513'; var d = new Date(times ...

  8. VMware克隆虚拟机,克隆机网卡启动不了解决方案

    Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interfac ...

  9. springboot使用之四:错误页面404处理建议

    每个项目可能都会遇到404,403,500等错误代码,如没有错误页面,则会给用户一个很不友好的界面,springboot项目同样也存在这个问题. 但在官方文档并没有相关配置信息,这就要求我们自己来实现 ...

  10. 【微信要跪】 iOS 应用如何完全支持 IPv6-ONLY 网络?

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...