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

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

就绪状态:调用了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. android蓝牙打印机

    您还未登录!|登录|注册|帮助 首页 业界 移动 云计算 研发 论坛 博客 下载 更多 reality_jie的专栏 编程的过程是一种微妙的享受       目录视图 摘要视图 订阅 CSDN2013 ...

  2. VS 2010启动崩溃

    事情缘由,同事装了一个软件不能用,我说我试下吧. 好吧,先装CAD2002,再装“截取断面工具”,好家伙,还是不能用,折腾了几遍还是不行,后来干脆不倒腾了. 打开VS,发现启动不了,显示 第一反应,I ...

  3. WebView cookie 管理

    在Android应用程序中经常会加载一个WebView页,如果需要客户端向WebView传递信息,比如Cookie,也是可以的. 需要应用程序先将Cookie注入进去,打开该网页时,WebView会将 ...

  4. JS-随机函数

    // alert( Math.round(3.4) );// 0~1 : Math.round(Math.random());// 0~10// alert( Math.round(Math.rand ...

  5. MySQL Table is marked as crashed 解决方法

    MYSQL数据表出现问题,提示: ERROR 144 (HY000): Table './dpt/dpt_production' is marked as crashed and last (auto ...

  6. Mini projects #8–RiceRocks

    课程全名:An Introduction to Interactive Programming in Python,来自 Rice University 授课教授:Joe Warren, Scott ...

  7. iOS开发零基础--Swift教程 字符串的利用

    字符串的介绍 字符串在任何的开发中使用都是非常频繁的 OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC中字符串@"" ...

  8. 用Yaml文件进行元素管理【转】

    原文:http://www.cnblogs.com/milanmi/p/4636503.html 如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要 ...

  9. 三星(SAMSUNG)910S3L-K04 安装win7的BIOS设置

    三星(SAMSUNG)910S3L-K04 开机后连续点击F2进入BIOS,再进入BOOT.将SECURE BOOT CONTROL点成disabled,将OS MODE SELECTION选为uef ...

  10. Python-变量

    1.Python的变量是什么 变量是用来存储计算机程序中的信息,唯一的目的是将数据存储在内存中. 2.Python变量的组成 变量由字母.数字.下划线组成: 变量的第一位不能是数字,可以是字母或下划线 ...