java多线程的理解

 

线程的5种状态:新建,就绪,运行,阻塞,死亡。

Thread.sleep:线程  运行状态 转为  阻塞状态,(其它线程启动运行)

Thread.yield:   线程 运行状态 转为 就绪状态,(同优先级线程启动运行)

ThreadA.join:等待ThreadA执行完成。

线程的两种方式:

继承自Thread,实现Runnable.

在线程中看是否有操作的同一对象的实例。如果有的话要考虑线程的同步和互斥。通俗点来说就是某个类的某个成员变量会有多个线程访问。

线程的同步:

同步代码块:同步加锁的是对象,而不是代码。

synchronized(Object A){

}

同步监视器是A,表示的是一个临界区。

同步方法:

synchronized Method1(){

}

synchronized Method2(){

}

同步锁:

Lock lock = new ReentrantLock();

public Mehtod1(){

lock.lock();

finally{

lock.unlock();

}

}

public Mehtod2(){

lock.lock();

finally{

lock.unlock();

}

}

同步监视器的释放:

1.当前线程的同步方法或者同步代码块执行结束,当前线程即释放同步监视器。

2.在同步方法或者同步代码块中出现了error或者exception的时候。

3.当线程执行同步方法或者同步代码块时,程序执行了同步监视器对象的wait方法,则当前线程,并释放同步监视器。

下面的情况不会释放同步监视器:

1.当线程执行同步方法或者同步代码块时,程序调用Thread.Sleep,Thread.Yield方法。

2.当线程执行同步方法或者同步代码块时,其他线程调用了该线程的suspend方法将该线程挂起。

线程的通信:

同步方法块或者同步方法使用object的wait,notify和notifyAll三个方法来进行线程的通信。

如果是同步方法块synchronized(Object a):则在代码中要使用a.wait,a.notify,a.notifyAll;

如果使用的是同步方法synchronized methodA(),则同步监视器是this对象,可以直接在代码中使用wait,notify和notifyAll方法。

wait:导致当前的线程等待,并且释放当前的同步监视器。直到其他线程调用该同步监视器的notify方法和notifyall方法。

notify:唤醒在此监视器上等待的单个线程,但是选择是任意的。

notifyAll:唤醒在同步监视器上等待的所有线程。

java多线程的理解的更多相关文章

  1. (转载)Java多线程入门理解

    转载出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更 ...

  2. synchronized与static synchronized 的差别、synchronized在JVM底层的实现原理及Java多线程锁理解

    本Blog分为例如以下部分: 第一部分:synchronized与static synchronized 的差别 第二部分:JVM底层又是怎样实现synchronized的 第三部分:Java多线程锁 ...

  3. 温故知新-java多线程&深入理解线程池

    文章目录 摘要 java中的线程 java中的线程池 线程池技术 线程池的实现原理 简述 ThreadPoolExecutor是如何运行的? 线程池运行的状态和线程数量 任务执行机制 队列缓存 Wor ...

  4. 谈谈你对Java多线程的理解以及多线程的实现方式

    说线程之前先说进程,何为进程?进程就是正在进行中的程序.比如电脑同时在运行QQ进程.cmd进程.wps进程.飞秋进程等.在某一时刻,CPU只能执行一个程序,只是在做快速切换,我们肉眼看不出来. 比如: ...

  5. Java多线程深入理解

    在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 对于直接继承Thread的类来说,代码大致框架是: ? 1 2 3 4 5 6 7 8 9 10 ...

  6. Java多线程的理解和实例

    编写具有多线程程序经常会用到的方法:run(), start(), wait(), notify(), notifyAll(), sleep(), yield(), join() 还有一个关键字:sy ...

  7. Java多线程 -- 深入理解JMM(Java内存模型) --(五)锁

    锁的释放-获取建立的happens before 关系 锁是Java并发编程中最重要的同步机制.锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息. 下面是锁释放-获取的示例代 ...

  8. 从JAVA多线程理解到集群分布式和网络设计的浅析

    对于JAVA多线程的应用非常广泛,现在的系统没有多线程几乎什么也做不了,很多时候我们在何种场合如何应用多线程成为一种首先需要选择的问题,另外关于java多线程的知识也是非常的多,本文中先介绍和说明一些 ...

  9. 关于java多线程中异常捕获的理解

    在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...

随机推荐

  1. Oracle Metalink Notes Collection

    INV Note 123456.1 Latest 11i Applications Recommended Patch List Note 568012.1:FAQ: Inventory Standa ...

  2. iOS平台添加Google Admob -1/2(Unity3D开发之七)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=567 Unity调用iOS还是非 ...

  3. python 内存数据库与远程服务

    python 内存数据库与远程服务 需要import的python 内存数据库代码参考下面的链接: http://blog.csdn.net/ubuntu64fan/article/details/5 ...

  4. 根据CSS的class选择DOM

    // 网上参考的,自己修改了一部分 // 代码如下,纯JS,要求浏览器支持 getElementsByClassName 方法 <script type="text/javascrip ...

  5. JAVA之旅(十五)——多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止

    JAVA之旅(十五)--多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止 我们接着多线程讲 一.生产者和消费者 什么是生产者和消费者?我们 ...

  6. EFI怎么装系统? UEFI BIOS

    关于EFI的介绍,就不赘述了. 大家可以看看这个帖子 http://benyouhui.it168.com/thread-2488583-1-1.html 总之,新电脑都是这玩意,win8也做了相应E ...

  7. 【Unity Shaders】Using Textures for Effects——让sprite sheets动起来

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  8. Web资源认证原理

    Web服务器与浏览器之间的认证流程没有规定的步骤,根据不同的认证模式及鉴权方式可能会有不同的执行步骤.下图用一个最简单的流程了解整个认证过程是如何工作的,首先浏览器向服务器发起请求,然后服务器向浏览器 ...

  9. C语言实现万年历

    给出你想知道的年份,便可以计算出该年对应的每个月每个日所对应的星期数,是不是感觉很好玩 ? #include <stdio.h> #include<stdlib.h> long ...

  10. CSDN_投票评选_JS_分析脚本

    作者: 铁锚 日期: 2013年12月31日 如题, 使用说明如下: 1. 原创图书 http://special.csdn.net/book2013/yc.html 2. 引进图书 http://s ...