当前位置: 首页 > wzjs >正文

做树状图的网站深圳的网站建设公司推荐

做树状图的网站,深圳的网站建设公司推荐,wordpress 页面加载时间 查询次数_和内存,网站新闻 写法java面试题 线程、多线程、线程与进程 进程和线程有什么区别? 进程(Process)是操作系统分配资源的基本单位,一个进程拥有的资源有自己的堆、栈、虚存空间(页表)、文件描述符等信息。 从编程的角度来理解进…

java面试题

线程、多线程、线程与进程

进程和线程有什么区别?

进程(Process)是操作系统分配资源的基本单位,一个进程拥有的资源有自己的堆、栈、虚存空间(页表)、文件描述符等信息。

从编程的角度来理解进程,可以把它看作是一个类或一个 PCB(Process Control Block)进程控制块的结构体,这个结构体中大致包含以下几个内容:

  1. 进程编号 PID:进程的身份标识。

  2. 进程的状态:

    新建状态

    就绪状态

    运行状态

    阻塞状态

    销毁状态

  3. 执行优先级

  4. 上下文

  5. 内存地址

线程(Thread)是操作系统能够进行运算调度的基本单位。它包含在进程中,是进程中的实际运行单位。在 Unix System V 及 SunOS 中线程也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

线程是轻量级的进程,一个进程中包含了多个线程,因此多个线程间可以共享进程资源。

进程和线程的区别主要体现在以下几点:

  1. 从属关系不同:进程是正在运行程序的实例,进程中包含了线程,而线程中不能包含进程;
  2. 描述侧重点不同:进程是操作系统分配资源的基本单位,而线程是操作系统调度的基本单位;
  3. 共享资源不同:多个进程间不能共享资源,每个进程有自己的堆、栈、虚存空间(页表)、文件描述符等信息,而线程可以共享进程资源文件(堆和方法区);
  4. 上下文切换速度不同:线程上下文切换速度很快(上下文切换指的是从一个线程切换到另一个线程),而进程的上下文切换的速度比较慢;
  5. 操纵者不同:一般情况下进程的操纵者是操作系统,而线程的操纵者是编程人员。

小结:简单来说,进程是操作系统分配资源的基本单位,而线程是操作系统调度的基本单位。一个进程中至少包含一个线程,线程不能独立于进程而存在。进程不能共享资源,而线程可以。线程可以看作是轻量级的进程,它们的主要区别体现在:从属关系、描述侧重点、共享资源、上下文切换速度和操纵对象等不同,线程可以看作是一个轻量级的“进程”。

多线程有什么优缺点?

多线程的优点是可以提高程序的执行性能。例如,有个 90 平方的房子,一个人打扫需要花费 30 分钟,三个人打扫就只需要 10 分钟,这三个人就是程序中的“多线程”。

多线程的缺点是它带来了编码的复杂度,并且带来了线程安全性问题,也就是程序的执行不符合预期结果的问题。

线程的创建方式有哪些?

线程的创建,分为以下三种方式:

  1. 继承 Thread 类,重写 run 方法;
  2. 实现 Runnable 接口,实现 run 方法;
  3. 实现 Callable 接口,实现 call 方法。
  • 继承 Thread 类
class ThreadTest {public static void main(String[] args) throws Exception {MyThread thread = new MyThread();thread.start();}
}class MyThread extends Thread {@Overridepublic void run() {System.out.println("Thread");}
}
  • 实现 Runnable 接口
class ThreadTest {public static void main(String[] args) {MyRunnable runnable = new MyRunnable();new Thread(runnable).start();}
}class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("Runnable");}
}
  • 实现 Callable 接口
class ThreadTest {public static void main(String[] args) throws Exception {MyCallable callable = new MyCallable();// 定义返回结果FutureTask<String> result = new FutureTask(callable);// 执行程序new Thread(result).start();// 输出返回结果System.out.println(result.get());}
}class MyCallable implements Callable {@Overridepublic String call() {System.out.println("Callable");return "Success";}
}

如何简单的使用线程?

JDK 8 之后可以使用 Lambda 表达式很方便地创建线程,请参考以下代码:

new Thread(() -> System.out.println("Lambda Of Thread.")).start();

用户线程和守护线程有什么区别?

在 Java 语言中,线程分为两类:用户线程和守护线程,默认情况下我们创建的线程或线程池都是用户线程,所以用户线程也被称之为普通线程。

想要查看线程到底是用户线程还是守护线程,可以通过 Thread.isDaemon() 方法来判断,如果返回的结果是 true 则为守护线程,反之则为用户线程。

守护线程(Daemon Thread)也被称之为后台线程或服务线程,守护线程是为用户线程服务的,当程序中的用户线程全部执行结束之后,守护线程也会跟随结束。

守护线程的角色就像“服务员”,而用户线程的角色就像“顾客”,当“顾客”全部走了之后(全部执行结束),那“服务员”(守护线程)也就没有了存在的意义,所以当一个程序中的全部用户线程都结束执行之后,那么无论守护线程是否还在工作都会随着用户线程一块结束,整个程序也会随之结束运行。

小结:默认情况下我们创建的线程或线程池都是用户线程,守护线程是为用户线程服务的,当一个程序中的所有用户线程都执行完成之后程序就会结束运行,程序结束运行时不会管守护线程是否正在运行,由此我们可以看出守护线程在 Java 体系中权重是比较低的,这就是守护线程和用户线程的区别。

线程常用的方法有哪些?

线程常用的方法有以下几个:

  1. start():启动线程;
  2. wait():实现线程等待;
  3. notify()/notifyAll():唤醒线程;
  4. sleep(xxx):带有结束时间让线程休眠的方法;
  5. yield():交出 CPU 执行权。

start 和 run 方法有什么区别?

简单来说,run 方法是对象的普通方法,而 start 方法是开启新线程的方法。它们的区别体现在以下几点:

  1. 方法性质不同:run 是一个普通方法,而 start 是开启新线程的方法。
  2. 执行速度不同:调用 run 方法会立即执行任务,调用 start 方法是将线程的状态改为就绪状态,不会立即执行。
  3. 调用次数不同:run 方法可以被重复调用,而 start 方法只能被调用一次。

start 方法之所以不能被重复调用的原因是,线程的状态是不可逆的,Thread 在 start 的实现源码中做了判断,如果线程不是新建状态 NEW,则会抛出非法线程状态异常 IllegalThreadStateException。

wait 方法和 sleep 方法有什么区别?

sleep 和 wait 方法都可以让线程进入休眠状态,但二者是完全不同的,它们的区别主要体现在以下几点。

  • 使用语法不同

wait 方法必须配合 synchronized 一起使用,不然在运行时就会抛出 IllegalMonitorStateException 的异常。

而 sleep 可以单独使用,无需配合 synchronized 一起使用。

  • 所属类不同

wait 方法属于 Object 类的方法,而 sleep 属于 Thread 类的方法。

  • 唤醒方式不同

wait 方法执行时会主动的释放锁,而 sleep 方法则不会释放锁。


文章转载自:

http://w8k7uHqt.tLzbt.cn
http://licA859w.tLzbt.cn
http://rCWtCAJV.tLzbt.cn
http://OptQAVI0.tLzbt.cn
http://9LamthJl.tLzbt.cn
http://6fQzxD3V.tLzbt.cn
http://NTprB5kr.tLzbt.cn
http://41Sv4Y56.tLzbt.cn
http://BfThoLxB.tLzbt.cn
http://gFTdkTvy.tLzbt.cn
http://0U3oSbAt.tLzbt.cn
http://4bsrkx5s.tLzbt.cn
http://nqz1Fg9E.tLzbt.cn
http://8HBunNBD.tLzbt.cn
http://cRrYa3NY.tLzbt.cn
http://vB6mzE5a.tLzbt.cn
http://kN0LsUrF.tLzbt.cn
http://4jBPJWWX.tLzbt.cn
http://0maJvEma.tLzbt.cn
http://Fo9CKh0O.tLzbt.cn
http://0CJ8kfB0.tLzbt.cn
http://bDjwStFS.tLzbt.cn
http://LFVtw0Fj.tLzbt.cn
http://1ZAib1TG.tLzbt.cn
http://vlHiy2nk.tLzbt.cn
http://lla0KQ1U.tLzbt.cn
http://iUyCaB29.tLzbt.cn
http://L9wlTuke.tLzbt.cn
http://mRkTrnxk.tLzbt.cn
http://vVuo4vjy.tLzbt.cn
http://www.dtcms.com/wzjs/689173.html

相关文章:

  • 建设网站过程中天津seo霸屏
  • 海南综合网站电子商务网站功能介绍
  • 国内10大网站建设公司app外包公司推荐
  • 四川红叶建设有限公司网站六安网站制作多少钱
  • 贵州城乡住房建设部网站网站流量流出异常
  • 长寿做网站专业教育网站建设
  • 网站开发容易找工作吗深圳品牌男装有哪些
  • 吴江和城乡建设局网站龙岗召开企业服务大会
  • 商丘网站建设价格小广告推广网站
  • 常州市金坛建设局网站如何做网站域名备案
  • 贵州省城乡建设部网站首页怎么申请商标品牌
  • 桥梁建设 网站网站 展示板
  • 一锅汤资源网站建设大全南京和筑建设有限公司网站
  • 最优的网站建设推广网站怎么才能被百度收录
  • 河北远策网站建设wordpress作者增加分类插件
  • 呼市做网站公司响应式网站 图片处理
  • 网站关键词排名怎么做计算机语言python
  • 展示图片的网站模板2021年经典营销案例
  • 建立网站时间网站模版好建设吗
  • 建设厅工作证查询网站蓝色的网站
  • 河南网站seo费用长沙网站建设 鼎誉
  • 专业网站制作地址企业网站模板是什么
  • 建站公司会有多大的坑邯郸网站设计怎么做
  • 徐州网站无障碍建设网站开发开题报告范文2019
  • 一级做爰片c视频网站火车头导入wordpress
  • 网站建设用的什么语言lumen wordpress 下载
  • 漳州网站设计制作安卓html编辑器
  • 广州市从化区住房和建设据网站做机器人的网站
  • php网站开发需要学什么沈阳市网站建设报价
  • 网站推广渠道特点自建网站如何备案