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知识纷纷呼 ...
随机推荐
- sql cast()和convert()
19.CAST()函数和CONVERT()函数 CAST()函数可以将某种数据类型的表达式转化为另一种数据类型 CONVERT()函数也可以将制定的数据类型转换为另一种数据类型 19.1 CAST() ...
- MATLAB 编程风格指南及注意事项
MATLAB编程风格指南Richard Johnson 著Genial 译MATLAB 编程风格指南Richard JohnsonVersion 1.5,Oct. 2002版权: Datatool 所 ...
- linux下创建管理员组 使用 su - 命令
通常情况下,用户通过执行“su -”命令.输入正确的root密码,可以登录为root用户来对系统进行管理员级别的配置.但是,为了更进一步加强系统的安全性,有必要建立一个管理员的组,只允许这个组的用户来 ...
- sizeof和strlen()的区别
二者有本质上的区别 从定义可以知道sizeof只是一个operator,而strlen()则是定义一个定义在<string.h>中的函数;所以sizeof(string)是在计算strin ...
- 理论与实践中的 C# 内存模型,第 2 部分
转载自:https://msdn.microsoft.com/zh-cn/magazine/jj883956.aspx 这是介绍 C# 内存模型的系列文章的第二篇(共两篇). 正如在 MSDN 杂志十 ...
- 20145218 《Java程序设计》第四周学习总结
20145218 <Java程序设计>第四周学习总结 教材学习内容总结 继承 继承共同行为 继承基本上就是避免多个类间重复定义共同行为. 继承的三个好处:减少代码冗余:维护变得简单:扩展变 ...
- hdu 1021
刚开始直接按题意来写,WA了,唉,果然经验不够..然后开始找规律,本来一看到这种题,第一反应就是规律题,然后看看题意,貌似没啥规律哦!就像当时学DP一样,总是想当然被智商压制了啊喂! #include ...
- [Java] Java中List 去掉重复的值,并保持原先List顺序
private List<YourBean> removeDuplicate(List<YourBean> list) { Set<YourBean> set = ...
- nodeschool.io 7
~~ HTTP CLIENT ~~ Write a program that performs an HTTP GET request to a URL provided toyou as the f ...
- python获取文件的内容