10.进程和线程

  进程是执行者的应用程序,而线程是进程内部的一个执行序列.一个进程可以有多个线程.线程又叫轻量级进程.

  创建线程的三种方式:

  I> 继承Thread类

  II> 实现Runnable接口

  III> 应用程序可以使用Executor框架来创建线程池

  实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类.在用用设计中已经继承类别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口.同时,线程池也是非常高效的,很容易实现和使用.

  线程的状态:

  I> 新建(new):新创建了一个对象.

  II> 可运行(runnable):线程新创建对象后,其他线程(比如main线程)调用了该对象的start()方法,该状态的线程位于可运行的线程池中,等待被线程调度选中,获取CPU的使用权.

  III> 运行(running):可运行状态的线程获得了CPU的时间片,执行代码.

  IV> 阻塞(block):阻塞状态是指线程因为某种原因放弃了CPU的使用权,也即让出了CPU时间片,暂时停止运行.直到线程进入可运行状态,才有机会再次获得CPU时间片转到运行状态.

  阻塞的情况分为3种:

  a> 等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待队列中.

  b> 同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中.

  c> 其他阻塞:运行的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求,JVM会把该线程置为阻塞状态.当sleep()状态超时时,join()等待线程终止或超时或I/O处理完毕,线程重新转入可运行状态.

  V> 死亡(dead):线程run(),main()方法执行结束,或者因异常退出run()方法,则该线程结束生命周期,死亡的线程不可再次复生.

 11.同步方法和同步代码块

  同步方法默认用this或者当前类class对象作为锁.

  同步代码块可以选择以什么来加锁,比同步方法要更加细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法.

12.监视器

  监视器和锁在Java虚拟机中是一块使用的.监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块.每一个监视器都和一个对象引用相关联.线程在获取锁之前不允许执行同步代码.

13.死锁

  两个(或多个)进程都在 等待对方执行完毕才能继续往下执行的时候就发生类死锁.结果就是两个进程都陷入类无限等待中.

  使用多个线程的时候,一种非常简单的避免死锁的方式就是:指定获取死锁的顺序,并强制按照指定的顺序获取锁.因此如果所有的线程都是一同样的顺序加锁和释放锁,就不会出现死锁了.

java基础-003的更多相关文章

  1. 003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程

    003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程 Java程序长啥样? 首先编写一个Java程序 记事本编写程序 打开记事本 1.wi ...

  2. 微冷的雨Java基础学习手记(一)

    使用Java理解程序逻辑 之凌波微步 船舶停靠在港湾是很安全的,但这不是造船的目的 北大青鸟五道口原玉明老师出品 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识点时,要 ...

  3. java基础01

    1. /** * JDK: (Java Development ToolKit) java开发工具包.JDK是整个java的核心! * 包括了java运行环境 JRE(Java Runtime Env ...

  4. Java 基础总结大全

    Java 基础总结大全 一.基础知识 1.JVM.JRE和JDK的区别 JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平台,jv ...

  5. java基础 01

    java基础01 1. /** * JDK: (Java Development ToolKit) java开发工具包.JDK是整个java的核心! * 包括了java运行环境 JRE(Java Ru ...

  6. [ 转载 ] Java基础二

    前言 关于赢在面试的Java题系列基本收集整理完成了,所有题目都是经过精心挑选的,很基础又考验求职者的基本功,应该说被面试到的几率很大.这里整理挑选出来供大家面试前拿来看一看,所有题目整理自网络,有一 ...

  7. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  8. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  9. 【JAVA面试题系列一】面试题总汇--JAVA基础部分

    JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...

  10. 最适合作为Java基础面试题之Singleton模式

    看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...

随机推荐

  1. python的变量传递

    python中变量都被视为对象的引用.python函数调用传递参数的时候,不允许程序员选择传值还是传引用,python参数传递采用的都是“传对象引用”的方式.     这种方式相当于传值和传引用的结合 ...

  2. Matlab求齐次方程的解

    % 求Ax=0的解: r=rank(A): x=null(A,r) 求出来x的是归一化后的解.

  3. K-均值聚类及其在生物信息中的应用

    如果一点基础没有最好先拿起一本教材开始学,<机器学习实战>还不错,P93,书上有python源码和练习数据,非常适合新手. k均值聚类 名词:簇:相似度算法 伪代码 创建K个点作为起始质心 ...

  4. dede顶级栏目直接显示内容

    点击网站栏目管理,增加顶级栏目 在弹出的增加窗口中,填上栏目名称,其它的如果没有特殊的要求可直接默认 点击常规选项旁边的高级选项,并且在列表模板中,将其改一个文件名,这个文件名就是后面需要使用到的文件 ...

  5. C++编译错误cannot have cv-qualifier

    C++编译错误cannot have cv-qualifier 在C++中CV指const和volatile两个关键字.有两种情况不能使用CV限定. 一.非成员函数不能含有CV限定,即const和vo ...

  6. Windows下快捷键

    1.任务管理器ctrl+alt+delete 2.切换任务窗口alt+tab 3.命令行Win+R 命令: {打开任务管理器:taskmgr} {打开远程桌面连接:mstsc} 4.回到桌面Win+D ...

  7. [saiku] 使用 Apache Phoenix and HBase 结合 saiku 做大数据查询分析

    saiku不仅可以对传统的RDBMS里面的数据做OLAP分析,还可以对Nosql数据库如Hbase做统计分析. 本文简单介绍下一个使用saiku去查询分析hbase数据的例子. 1.phoenix和h ...

  8. VS2010中将当前选定项目做为启动项

    Visual Studio 2010一个解决方案中多个项目,如果想选择哪个项目就设置哪个项目为启动项可以这么做. 一.对于以后新建的解决方案想这样通过VS设置工具: 二.对于已经存在的解决方案可以这样 ...

  9. 集成 WeChat SDK - 支付篇

    作者感言 惯例, 开头都是要说些东西的了, 随着现在的App越来越商业化, 很多公司的App都会集成第三方的支付SDK, 这样子的成本就比较低, 但是呢, 有很多朋友还是不太会集成, 也不太爱看集成文 ...

  10. js 正则表达式 查找

    <script>var str='<p><img style="width: 140px; height: 105px;" alt="&qu ...