多线程:

进程与线程:

进程:同一个操作系统中执行的一个子程序,包含了三部分虚拟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面试第十一天的更多相关文章

  1. Java面试必备知识

    JAVA面试必备知识 第一,谈谈final, finally, finalize的区别. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可 ...

  2. Java 面试宝典-2017

    http://www.cnblogs.com/nelson-hu/p/7190163.html Java面试宝典-2017   Java面试宝典2017版 一. Java基础部分........... ...

  3. Java面试宝典-2017

    Java面试宝典2017版 一. Java基础部分........................................................................... ...

  4. 分享13道上海尚学堂拿回来的Java面试真题,这些都是Java核心常见问题,想拿OFFER必看!

    上海尚学堂Java培训学员参加面试带回来的真题,分享出来与大家,希望大家能认真地看看做一遍.后面有详细题解答案,对照下,看看自己做得怎么样,把这些面试遇到的真题全部掌握,做好面试笔试前的准备. 一.1 ...

  5. Java面试宝典2018

    转 Java面试宝典2018 一. Java基础部分…………………………………………………………………………………….. 7 1.一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制 ...

  6. Java面试必刷常见真题200+ ,让你“过五关,斩六将”,轻松入大厂

    这份面试清单是我从 2015 年做 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘我在 Java 技术栈中的技术盲点,然后修复和完善它,以此来提高自己的技术水平.虽 ...

  7. Java面试,如何在短时间内做突击

    面试前很有必要针对性的多刷题,大部分童鞋实战能力强,理论不行,面试前不做准备很吃亏.这里整理了很多常考面试题,希望对你有帮助.   面试技术文 Java岗 面试考点精讲(基础篇01期) Java岗 面 ...

  8. Java面试知识点汇总

    Java面试知识点汇总 置顶 2019年05月07日 15:36:18 温柔的谢世杰 阅读数 21623 文章标签: 面经java 更多 分类专栏: java 面试 Java面试知识汇总   版权声明 ...

  9. Java面试宝典2017

    JAVA面试.笔试题(2017版)                 欲想成功,必须用功!   目录 一.                  HTML&CSS部分................ ...

随机推荐

  1. 华为S5300系列交换机V200R001SPH027升级补丁

    S5300SI-V200R001SPH027.pat 附件: 链接:https://pan.baidu.com/s/1ulE0j5Rp4xMkAaOjNGKLMA  密码:d5ze

  2. Aptana studio 3配色方案的修改方法

    http://www.weste.net/2013/1-29/88614.html Aptana studio 3的确是一个不错的IDE,但是默认的黑底白色代码样式看时间长了有点审美疲劳了,如何能够更 ...

  3. Easy WordPress Updates: Store FTP Info in wp-config.php

    Saw an interesting blog post on Twitter today about storing WordPress FTP information in wp-config.p ...

  4. SecureCRT远程连接Linux服务器及相关配置

    这里的连接采用的是SSH2协议,关于SSH2协议可百度 一.连接不上可能的原因 1)服务器防火墙iptables /etc/init.d/iptables stop 2)SSH服务有问题 3)客户端到 ...

  5. mysql官网文档调试MYSQL资料 5.7

    http://dev.mysql.com/doc/refman/5.7/en/debugging-server.html

  6. NAT(网络地址转换)

    NAT(Network Address Translation,网络地址转换) 用途:当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机 ...

  7. python文本 单独处理每个字符的方法汇总

    python文本 单独处理字符串每个字符的方法汇总 场景: 用每次处理一个字符的方式处理字符串 方法: 1.使用list(str) >>> a='abcdefg'    >&g ...

  8. winform禁用标题栏

    protected override void WndProc(ref Message m) { if (m.Msg == 0x112) { switch ((int)m.WParam) { //禁止 ...

  9. 计算均值mean的MapReduce程序Computing mean with MapReduce

    In this post we'll see how to compute the mean of the max temperatures of every month for the city o ...

  10. Objective-C:浅复制(拷贝)

    浅复制:复制对象时,如果对象中包含对象类型的实例变量,只是复制指针.新对象中的对象类型实例变量和旧对象中的对象类型实例变量指的是同一个对象.任何一方实例变量对对象做修改,另一方实例变量指向的该对象也就 ...