多线程:

进程与线程:

进程:同一个操作系统中执行的一个子程序,包含了三部分虚拟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. JSONP跨域访问百度实现搜索提示小案例

    一.JSONP简介 JSONP 全称 JSON with padding(填充式 JSON 或参数式 JSON),JSONP实现跨域请求的原理,就是动态创建<script>标签,然后利用& ...

  2. vue各生命周期适合做的业务逻辑

    一.实际项目中使用最多的Vue生命周期大概是  created  mounted  updated 二.各自适合做的业务逻辑 1. created   相当于是页面刚开始加载的状态,此时不能操作实例的 ...

  3. python中的__all__和__slots__

    python两个有趣属性__all__可用于模块导入时限制,如:from module import *此时被导入模块若定义了__all__属性,则只有all内指定的属性.方法.类可被导入~若没定义, ...

  4. patch补丁命令 P1 P0 P2

    http://fancyxinyu.blog.163.com/blog/static/1823213662013719115245699/ http://blog.chinaunix.net/uid- ...

  5. 关于TFS2010 远程无法创建团队项目的若干问题总结

    今天遇到一个TFS的问题,折腾了好几个小时,故将其记录,给有遇到类似问题的朋友一些参考. 1.本文前提:服务器端只安装了TFS2010,本地没有安装Visual Studio 2010,因此不能在服务 ...

  6. Redis的主从复制设置与安装

    1 验证redis的主从复制,将过程抓图 实验步骤 A.  安装Redis B.  启动Master Redis C.  创建redis-slave.conf配置文件 改动Redisport和打开sl ...

  7. 算法:快速排序(Quick Sort)

    算法定义 目前学习是五种排序(冒泡.插入.选择.合并.快速)中,快速排序是最让我喜欢的算法(因为我想不到),其定义如下: 随机的从数组中选择一个元素,如:item. 对数组进行分区,将小于等于 ite ...

  8. [翻译] FlatUIKit

    FlatUIKit FlatUIKit is a collection of iOS components styled with the "Flat UI" aesthetic ...

  9. OpenCV学习(29) 凸包(convexhull)

    在opencv中,通过函数convexHulll能很容易的得到一系列点的凸包,比如由点组成的轮廓,通过convexHull函数,我们就能得到轮廓的凸包.下面的图就是一些点集的凸包. 求凸包的代码如下: ...

  10. HTML中显示特殊字符,如尖括号 “<”,">"等等

    这几天,做个网页,之后进行解析,总是出错.最后发现是因为错误的使用了尖括号  “<”,">". 如下面的html代码: <body> 显示:<inpu ...