java基础-003
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的更多相关文章
- 003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程
003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程 Java程序长啥样? 首先编写一个Java程序 记事本编写程序 打开记事本 1.wi ...
- 微冷的雨Java基础学习手记(一)
使用Java理解程序逻辑 之凌波微步 船舶停靠在港湾是很安全的,但这不是造船的目的 北大青鸟五道口原玉明老师出品 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识点时,要 ...
- java基础01
1. /** * JDK: (Java Development ToolKit) java开发工具包.JDK是整个java的核心! * 包括了java运行环境 JRE(Java Runtime Env ...
- Java 基础总结大全
Java 基础总结大全 一.基础知识 1.JVM.JRE和JDK的区别 JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平台,jv ...
- java基础 01
java基础01 1. /** * JDK: (Java Development ToolKit) java开发工具包.JDK是整个java的核心! * 包括了java运行环境 JRE(Java Ru ...
- [ 转载 ] Java基础二
前言 关于赢在面试的Java题系列基本收集整理完成了,所有题目都是经过精心挑选的,很基础又考验求职者的基本功,应该说被面试到的几率很大.这里整理挑选出来供大家面试前拿来看一看,所有题目整理自网络,有一 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- 【JAVA面试题系列一】面试题总汇--JAVA基础部分
JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...
- 最适合作为Java基础面试题之Singleton模式
看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...
随机推荐
- vim 学习记录
VIM中PHP代码使用tab键自动完成 更新于 2013-01-18 05:47:55UEANER 目录结构 $ tree -C ~/.vim | grep -v ".cnx" | ...
- Python核心编程-描述符
python中,什么描述符.描述符就是实现了"__get__"."__set__"或"__delete__" 方法中至少一个的对象.什么是非 ...
- html list <==> unformatted list
两者的区别很大不得不擦呢,任何两个东西的差别都很大,不得混淆.---一个有ul/ol的选择,一个没有
- git 10.8
git clone xxxx.git生成一个本地的文件夹acd agit checkout -b abcgit checkout mastergit pull然后数据全部由更新 但是是远程的更新 不能 ...
- 浅析KMP算法
浅析KMP算法 KMP算法是一种线性字符串的匹配算法,将主串S与模式串T匹配. 首先朴素算法大家都会,就是直接从S的每一个位置开始,枚举比较,时间效率为O(nm),现在要想到一种化简的方式,使得时间复 ...
- jQuery用户从服务器端注册登录
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 在ArcMap 10.3中创建和编辑数据
在ArcMap 10.3中创建和编辑数据 .......待补充 新建 创建一个新文件((Points, Polylines, and Polygons/点.线.多边形)
- tr设置背景图片
tr是不能设置背景图片的....
- listbox鼠标拖动数据和为button注册快捷键
将listbox1中的数据用鼠标拖动至listbox2,即有左至右. 分别对应控件注册如下事件DragEnter,MouseDown,DragDrop 代码如下: //P128 DataGridVie ...
- poj----1330Nearest Common Ancestors(简单LCA)
题目连接 http://poj.org/problem?id=1330 就是构建一棵树,然后问你两个节点之间最近的公共父节点是谁? 代码: /*Source Code Problem: 1330 U ...