多线程:

进程与线程:

进程:同一个操作系统中执行的一个子程序,包含了三部分虚拟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. Oracle DBA学习篇之SQL_TRACE

    SQL_TRACE ; ; set serveroutput on; alter session set sql_trace=true; select count(*) from firefox; a ...

  2. Tasker to proximity screen on

    in my previous entry, i posed an idea how to use the built-in proximity sensor to turn the screen of ...

  3. NAT(网络地址转换)

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

  4. 绝对定位的div的居中方法,下面的写法兼容IE系列浏览器和火狐浏览器。

    详细解说,直接看样式:#dingwei{padding:10px;background-color:#003300;color:#FFFFFF; width:600px;height:300px; d ...

  5. MVC文件上传01-使用jquery异步上传并客户端验证类型和大小

    本篇体验MVC上传文件,从表单上传过渡到jquery异步上传. MVC最基本的上传文件是通过form表单提交方式 □ 前台视图部分 <% using(Html.BeginForm("F ...

  6. ACM-DP之最大连续子序列——hdu1231

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  7. 《Head First 设计模式》学习笔记——策略模型

    我们全都使用别人设计好的库与框架.我们讨论库与框架.利用他们的API编译成我们的程序.享受运用别人的代码所带来的长处.看看java api它所带来的功能:网络.GUI.IO等.库与框架长久以来,一直扮 ...

  8. cas4.0 session中返回更多的用户信息

    实现思路: 新增AccoutAttributeDao类继承StubPersonAttributeDao,重写getPerson方法.实际应用中我们只需要修改getPersion方法中的内容,根据实际情 ...

  9. 如何记录linux终端下的操作日志

    如何记录linux终端下的操作日志 在linux终端下,为方便检查操作中可能出现的错误,以及避免屏幕滚屏的限制,我们可以把操作日志记录下来.常用的工具有 screen,script,以及tee等,通过 ...

  10. 在Ubuntu 12.04 桌面上设置启动器(快捷方式)

    在Ubuntu 12.04 桌面上设置启动器(快捷方式)过程讲解: 如下图所示,Eclipse 和 SQLDeveloper 都可以直接双击打开,这些应用程序的启动器都在 /usr/share/app ...