第九章作业
来源:互联网 发布:linux操作系统入门 编辑:程序博客网 时间:2024/05/19 13:55
内存空间、一组系统资源,每一个进程的内部数据和状态都是完全独立的。
Java程序执行中的单个顺序的流控制称为线程,多线程则指一个进程中可
以同时运行多个不同的线程,执行不同的任务。
2.
java线程分为前台线程(也称用户线程或普通线程)和后台线程(Daemon thread)。
后台线程会随着主线程(main线程)的结束而结束,但是前台进程则不会(如果main线程先于前台进程结束,前台进程仍然会执行);或者说,只要有一个前台线程未退出,进程就不会终止。
默认情况下,程序员创建的线程是用户线程;用setDaemon(true)可以设置线程为后台线程;而用isDaemon( )则可以判断一个线程是前台线程还是后台线程;
jvm的垃圾回收器其实就是一个后台线程;
setDaemon函数必须在start函数之前设定,否则会抛出IllegalThreadStateException异常;
3.
两种
方式一:直接继承线程Thread类。该方法编写简单,可以直接操作线程,由于已经继承了Thread,不能再继承其他类了。
方式二:实现Runnable接口。当一个类已继承了另一个类时,就只能用实现Runnable接口的方式来创建线程;另外,使用此方法的更多原因是多个线程共享某个对象的资源。
4.
创建,就绪, 运行, 阻塞, 死亡。
start(), wait(), sleep(), join(), yield()
5.
线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
多线程同时访问共享资源(变量),导致线程安全问题。
采用加锁机制, 加入线程同步的技术。
synchronized 代码块:监视器就是指定的对象。
synchronized 方法:监视器就是this对象。
synchronized 静态方法:监视器就是相应的Class对象。
6.
线程之间需要一些协调通信,来共同完成一件任务。
使用wait和notifyAll实现线程间同步通信 。
7.
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
8.
class Dummy implements Runnable{private int count = 0;public void A() {System.out.println(Thread.currentThread().getName() + " A");synchronized (this) {System.out.println(Thread.currentThread().getName() + " A " + count++);}}public synchronized void B() {System.out.println(Thread.currentThread().getName() + " B " + count++);}@Overridepublic void run() {while(count < 100) {A();B();}}}public class Test {public static void main(String[] args) {Dummy d = new Dummy();Thread t1 = new Thread(d);Thread t2 = new Thread(d);t1.start();t2.start();}}9.
class Dummy_1 implements Runnable {public static boolean flag = true; @Overridepublic void run() {while(flag) {System.out.println("i am dummy_1");try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}class Dummy_2 implements Runnable {@Overridepublic void run() {Dummy_1.flag = false;System.out.println("i am dummy_2");}}public class Test {public static void main(String[] args) {new Thread(new Dummy_1()).start();try {Thread.sleep(10000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}new Thread(new Dummy_2()).start();System.out.println("main over");}}
- Java第九章作业
- 第九章 作业.
- 第九章 作业
- 第九章作业
- 第九章作业~
- 数据库第九章作业
- 第九章作业
- 第九章作业
- 第九章作业 (公鸡母鸡)
- java作业第九章9_5
- 第九周 第六章 指针 作业
- 操作系统第九章作业paging-multileveltranslate
- 第九周作业
- 第九周作业
- 第九周作业 1
- 第九周作业 2
- 第九周作业
- 第九周作业2
- SSM框架的搭建(Spring+SpringMVC+Mybatis+DB2)
- Apache Kylin在百度地图的实践
- GBDT和RF
- mybatis批量修改 (update的值也是动态的)
- 使用kindeditor和Struts开发时遇到错误
- 第九章作业
- git rebase 使用详解
- 部署 ShowDoc 到自己的服务器
- HTTP中的一些属性的用法
- [AndroidStudio] Unable to delete dirctory 问题
- openssl证书生产过程
- springMVC整合swagger(亲自试验完全可用)
- 习题5.1
- handlebars+ AmazeUI图片轮播