java面试第十一天
多线程:
进程与线程:
进程:同一个操作系统中执行的一个子程序,包含了三部分虚拟CPU、代码、数据
多进程:同一个操作系统中执行的多个并行的子程序。可以提高cpu的使用率
线程:在同一个进程当中执行的子程序流
多线程:同一个进程当中并发执行的多个子程序流。可以提高cpu的使用率
进程与线程的区别:
进程有独立的进程空间,进程中的数据存放空间(堆空间和栈空间)是独立的。
线程的堆空间是共享的,栈空间是独立的,线程消耗的资源也比进程小,相互之间可以影响的。
java中如何调进程:
调用本地程序的两个类
Runtime
Runtime.getRuntime.exec(...); //执行一个程序
其返回值就是Process类型
Process
注意:
只有运行状态的线程才有机会执行代码,主线程的中止不会影响其他的正在运行中的线程,主线程中止也就是main()方法退出了。只有进程中的所有线程都中止时,进程(JVM进程)才会退出,只要有线程没有中止,进程就不会退出。
操作系统决定线程是否有优先级,独占式的操作系统中系统会有优先级的概念,共享式的操作系统则不会有优先级的。
在线程的内部,程序依然顺序执行
线程编程的两种方法:
写一个类,继承Thread类,覆盖Thread类中继承来的run()方法,这样就写好了自定义的线程类。
继承java.lang.Thread类:
class MyThread extends Thread{
public void run(){ //覆盖run(),线程体方法,自身其实就是普通的方法
.......
}
}
启动线程:
public class TestThread{
public static void main(){
Thread t1=new Mythread();
T1.start(); //调用start()来启动线程,线程启动方法,向线程调度器说明当前线程已经准备好了,是一种可运行状态
}
}
写一个类,实现Runable接口,实现其中的run()方法。这种方法写好的类的对象需要作为线程类创建对象时构造方法的参数。
实现java.lang.Runnable接口:
Class MyThread implements Runnable{
public void run(){
}
}
启动线程:
public class TestThread{
public static void main(){
Runnable myThread = new MyThread();
Thread t = new Thread(myThread);
t.start();
}
}
Thread中的一些方法:
currentThread()
返回对当前正在执行的线程对象的引用(实现接口方式时使用)
sleep(long millis)
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。
本线程不会去抢,除非sleep结束。
多个线程之间都会去抢执行权限,不会考虑优先级。
yield()
暂停当前正在执行的线程对象,并执行其他线程。
只给本类或者优先级大于本类优先级的线程去抢。
join()
等待该线程终止。
放在start()前面则没有用处。
setDaemon(boolean on)
将该线程标记为守护线程,守护线程需要依赖其他线程,会在虚拟机停止的时候停止。
线程的生命周期:
1)初始状态:此时线程只是处于JVM进程中,只是创建了一个线程对象,并没有真正开始运行。
2)可动行状态:调用线程对象的start()方法,此时线程才真正的被创建,进入可运行状态,等待CPU的调度。“万事俱备,只欠CPU”。
3)运行状态:正在运行的线程,此时它拥有CPU的执行权。
4)阻塞状态:运行状态中的线程,如果正在等待用户输入或调用了sleep()和join()等方法都会导致线程进入阻塞状态,注意从阻塞状态出来的线程不一定马上回到运行状态,而是重新回到可运行状态,等待CPU的再次调度。
5)等待队列状态:一个线程调用一个对象的wait()会自动放弃该对象的锁标记,进入等待队列状态,只有当有另外一线程调用临界资源的notify()或notifyAll()方法,建议多使用notifyAll(),才会将等待队列中的线程释放,此线程进入锁池状态。
6)锁池状态:每个对象都有互斥锁标记,以防止对临界资源的访问造成数据的不一致,和数据的不完整性。一个线程拥有一个对象的锁标记后,另一线程想访问该对象,必须在锁池中等待。由系统决定哪个线程拿到锁标记并运行。注意从锁池状态出来的线程不是马上回到运行状态,而是重新回到可运行状态,等待CPU的再次调度。
7)终止状态:一个线程运行结束后称为终止状态,一个进程中只有所有的线程退出后才会终止。
java面试第十一天的更多相关文章
- Java面试必备知识
JAVA面试必备知识 第一,谈谈final, finally, finalize的区别. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可 ...
- Java 面试宝典-2017
http://www.cnblogs.com/nelson-hu/p/7190163.html Java面试宝典-2017 Java面试宝典2017版 一. Java基础部分........... ...
- Java面试宝典-2017
Java面试宝典2017版 一. Java基础部分........................................................................... ...
- 分享13道上海尚学堂拿回来的Java面试真题,这些都是Java核心常见问题,想拿OFFER必看!
上海尚学堂Java培训学员参加面试带回来的真题,分享出来与大家,希望大家能认真地看看做一遍.后面有详细题解答案,对照下,看看自己做得怎么样,把这些面试遇到的真题全部掌握,做好面试笔试前的准备. 一.1 ...
- Java面试宝典2018
转 Java面试宝典2018 一. Java基础部分…………………………………………………………………………………….. 7 1.一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制 ...
- Java面试必刷常见真题200+ ,让你“过五关,斩六将”,轻松入大厂
这份面试清单是我从 2015 年做 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘我在 Java 技术栈中的技术盲点,然后修复和完善它,以此来提高自己的技术水平.虽 ...
- Java面试,如何在短时间内做突击
面试前很有必要针对性的多刷题,大部分童鞋实战能力强,理论不行,面试前不做准备很吃亏.这里整理了很多常考面试题,希望对你有帮助. 面试技术文 Java岗 面试考点精讲(基础篇01期) Java岗 面 ...
- Java面试知识点汇总
Java面试知识点汇总 置顶 2019年05月07日 15:36:18 温柔的谢世杰 阅读数 21623 文章标签: 面经java 更多 分类专栏: java 面试 Java面试知识汇总 版权声明 ...
- Java面试宝典2017
JAVA面试.笔试题(2017版) 欲想成功,必须用功! 目录 一. HTML&CSS部分................ ...
随机推荐
- Java_JSP自定义标签的开发与应用
在JSTL提供了四个标签库(核心标签库.国际化标签库.数据库标签库和XML标签库),涉及到了几十个标签.虽然这些标签可以完成比较复杂的工作,但它们仍然无法满足程序中的特殊需求.因此,就需要用户根据自己 ...
- PostgreSQL远程连接配置管理/账号密码分配(解决:致命错误: 用户 "postgres" Ident 认证失败)
问题:致命错误: 用户 "postgres" Ident 认证失败 说明:这个是由于没有配置远程访问且认证方式没改造成的,只需要更改使用账号密码认证即可. 解决:找到pg_hba. ...
- Oracle中NVARCHAR2与VARCHAR2的相互转换
将NVARCHAR2转换为VARCHAR2: declare v_username varchar2(12) ; v_nm_login nvarchar2(12); begin selec ...
- git diff 打补丁
[root@workstation2017 demo]# git diff old new >cc.diff[root@workstation2017 demo]# cat cc.diffdif ...
- Netdata----Linux 性能实时监测工具
https://my-netdata.io/ https://github.com/firehol/netdata/wiki http://soluck.iteye.com/blog/2291618
- Delphi7下使用FastMM4
1> 将文件Replacement BorlndMM DLL/Precompiled/for Delphi IDE/Performance/BorlndMM.dll,替换掉Delphi/Bin下 ...
- error MSB8031: Building an MFC project for a non-Unicode character set is deprecated
vs2013编译VC++源码,错误: error MSB8031: Building an MFC project for a non-Unicode character set is depreca ...
- java代码声明引用变量经验
1.static只能修饰类的成员变量,不能修饰方法里的局部变量. 因为static是在类加载时候将成员变量存储进方法区的. 加载类的时候,是不去执行方法里的函数的.所以不会馆方法里的代码,自然就不会读 ...
- AndroidMainifest标签使用说明1——<action>
1.<action> 格式: <action android:name="string" /> 父标签: <intent-filter> 描写叙 ...
- 摘自知乎--mysql
允许晚辈叫一声前辈.从前辈的描述中可以看出前辈对MySQL已经有很好的理解,但我还是想从我这个半知半解的晚辈角度提出几点. 1.系统学习数据库,最要紧的是把基本功打牢,所以<数据库系统概念 原书 ...