线程和进程的区别

article/2025/10/30 22:55:23

1、线程和进程的区别

进程:是指一个内存中运行的应用程序(已经在内存中运行的程序). 一个进程都有一个独立的内存空间,一个电脑(手机)可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;

线程:是进程中的一个执行单元(线程是依赖于进程的),负责当前进程中程序的执行,一个进程中至少有一个线程(单线程程序)。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。

并发和并行

前提
多个任务
多个线程
是线程的特性

高性能、高可用、高并发(三高)
并行:指两个或多个事件在同一时刻发生(同时发生 同时处理 执行者不是一个)。
并发:指两个或多个事件在同一个时间段内发生(交替的发生 执行者是一个)。
电脑在执行任务的时候是采用并发还是并行?
使用的是并发, 因为电脑上只有一个CPU,但是电脑上好像却可以同时运行多个程序,同时开了多个线程,其实这是一种假象,因为CPU的计算速度极快,约每秒50亿次计算,而人能感觉到的时间流失是秒,所以电脑给我们一种感觉好像电脑上程序在同时执行.
计算机CPU都是-Java抢占式调度。 每一个线程都会执行到,但是不一定时按序执行,执行取决于线程优先级,CPU有自己算法。

2 线程创建三种基本方式

2.1 继承Thread类

1、Thread就是一个线程类,里面定义所有和线程相关的功能,只有是这个类才能开启线程,才能被CPU单独去执行.Java中线程执行的时候是采用的并发(因为是让CPU执行JAVA中线程里封装的任务). 学习的过程中不要纠结于多个线程执行的结果,因为是随机在执行,抢占式的在使用CPU资源(抢占式任务调度)。

2、java虚拟机采用抢占式调度模型,是指优先让可运行池中优先级高的线程占用CPU(不绝对),如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。

3、实现步骤
1、定义一个类MyThread继承Thread类 在MyThread类中重写run()方法,添加自己的任务
2、创建MyThread类的对象
3、启动线程 .start()
注意事项:千万不要使用线程对象调用run方法,因为并没有开启线程
观察结果:验证是否是抢占式调度。

public class ThreadExample extends Thread{//重写run@Overridepublic void run() {for (int i = 0; i < 200; i++){System.out.println("extends Thread run = " + i);}}
}
public class App {public static void main(String[] args) {ThreadExample te1 = new ThreadExample();ThreadExample te2 = new ThreadExample();//te.run();//调用run方法就没有开启线程,仅仅是使用线程对象调用了方法而已te1.start();te2.start();//main线程for (int i = 0; i < 100; i++){System.out.println("main Thread = " + i);}}
}

2.2 实现Runnable接口

1、@FunctionalInterface
public interface Runnable {
public abstract void run();
}
//这是一个函数式接口,规定里面只有一个run方法那么只需要让一个类实现Runnable接口即可,并且也需要覆写run方法。

2、Thread的构造方法创建对象的时候传入了Runnable接口的对象 Runnable接口对象重写run方法相当于指定线程任务,创建线程的时候绑定了该线程对象要做的任务
Runnable的对象称之为:线程任务对象 不是线程对象必须要交给Thread线程对象通过Thread的构造方法, 就可以把任务对象Runnable,绑定到Thread对象中, 将来执行start方法,就会自动执行。

3、实现步骤
1.定义一个类MyRunnable实现Runnable接口
2.在MyRunnable类中重写run()方法
3.创建MyRunnable类的对象
4.创建Thread类的对象,把MyRunnable对象作为构造方法的参数(绑定任务到线程对象)
5.启动线程

public class RunnableExample implements Runnable{@Overridepublic void run() {System.out.println("implements Runnable run()");}
}
public class App {public static void main(String[] args) {//线程任务类RunnableExample re = new RunnableExample();//定义线程对象Thread thread = new Thread(re);//一个线程任务可以绑定多个线程Thread thread2 = new Thread(re);//开启线程thread.start();thread2.start();for (int i = 0; i < 1000; i++) { System.out.println("我是主线程中任务....");}
}
}

2.3 实现Callable接口

1、@FunctionalInterface
public interface Callable {
V call() throws Exception;
}
2、在这里插入图片描述
3、实现步骤
1.在MyCallable类中重写call()方法 这就是线程任务方法.这个方法有返回值.
创建MyCallable类的对象
2.创建FutureTask的实现类FutureTask对象,把MyCallable对象作为构造方法的参数
3.创建Thread类的对象,把FutureTask对象作为构造方法的参数
4.启动线程
5.再调用get方法,就可以获取线程结束之后的结果。 call方法什么时候执行完,get才会执行.就可以拿到任务执行完后结果.

public class CallableExample implements Callable {

		@Overridepublic String call() throws Exception {for (int i = 0; i < 10; i++) {System.out.println(i+"-"+Thread.currentThread().getName(
));
}return "哈哈,我是返回值";
}public static void main(String[] args) throws ExecutionException
, InterruptedException {//线程任务CallableExample ce = new CallableExample();//线程任务类 - 只有这个FutureTask能接受返回值FutureTask ft = new FutureTask(ce);FutureTask ft1 = new FutureTask(ce);//线程类Thread t = new Thread(ft); //构造函数中只能传Runnable或Runnabl
e的实现类t.start();Thread t1 = new Thread(ft1); //构造函数中只能传Runnable或Runna
ble的实现类t1.start();System.out.println("t线程:"+ft.get()); //这是返回值System.out.println("t1线程:"+ft1.get()); //这是返回值
}
}

2.4 三种实现多线程方式总结

1、Thread 继承就不能继承其他类了,适合于这个任务只想被一个线程的对象执行的情况。
2、Runnable 解决单继承的问题(多实现),适合于一个任务想被多个线程执行的情况。
3、Callable 解决单继承的问题(多实现),适合于一个任务想被多个线程执行的情况,同时又返回结果,也可以抛异常。同时FutureTask可以判断线程是否执行完毕或取消执行。

3 线程Thread类

3.1 线程名称

在这里插入图片描述
默认主线程操作名字

public class GetThreadName {public static void main(String[] args) {//主线程for (int i = 0; i < 10; i++) {System.out.println("i = " + i + Thread.currentThread().getName());
}//获取当前线程对象Thread t = Thread.currentThread();System.out.println("t.getName() = " + t.getName());t.setName("主线程");System.out.println("t.getName() = " + t.getName());
}

Runnable接口子线程-1

public class RunnableName {public static void main(String[] args) {Runnable r = ()->{System.out.println("我是子线程" + Thread.currentThread().getName());
};Thread t = new Thread(r);//重新设置名称t.setName("Runnable子线程");System.out.println("t.getName() = " + t.getName());t.start();}
}

Runnable接口子线程-通过构造方法

public static void main(String[] args) {Thread t = new Thread(() ->{System.out.println(Thread.currentThread().getName());},"子线程");System.out.println("t.getName() = " + t.getName());t.start();
}

3.2 线程休眠

1、static void sleep(long millis) throws InterupterException
是一个静态方法,而且方法上还有编译时异常的声明,使用时一定要处理异常. 使当前正在执行的线程停留(暂停执行)指定的毫秒数, 1s = 1000ms, 过了指定的时间还会醒,可以继续执行任务
主线程休眠

public class MainSleep {public static void main(String[] args) throws InterruptedExcepti
on {for (int i = 0; i <10 ; i++) {Thread.sleep(1000);System.out.println("=========="+ i);}}
}

子线程休眠

public class ChildSleep {public static void main(String[] args) {Thread t = new Thread(()->{for (int i = 0; i < 10; i++) {try {Thread.sleep(1000);//TimeUnit.SECONDS.sleep(1); 工具类System.out.println("================"+ i);} catch (InterruptedException e) {e.printStackTrace();}}});t.start();}
}

http://chatgpt.dhexx.cn/article/E7AKdYKy.shtml

相关文章

线程与进程,你真得理解了吗

线程与进程&#xff0c;你真得理解了吗 1 进程与线程的关系和区别2 并行与并发3 线程共享了进程哪些资源 相信大家面试时一定没少被一个问题刁难&#xff0c;那就是进程和线程的区别是什么&#xff1f;这个问题延申开来并不像表面那么简单&#xff0c;今天就来深入一探。 开始…

axure自定义文本框样式

axure中的文本框是我们经常使用的元件&#xff0c;但它本身对样式的设置很有限&#xff0c;不能设置边框样式、阴影等&#xff0c;不能满足我们制作高保真原型的需求&#xff0c;本文给大家介绍一下结合矩形元件自定义文本框样式。&#xff08;PS&#xff1a;此处的“高保真”指…

html文本框左移动怎么设css,html---文本框样式;

一、一个单行文本框的例子 您的姓名&#xff1a; 您的E_mail&#xff1a; 输入口令&#xff1a; 二、检验用户输入的信息 三、制作一个留言簿 留 言 簿 姓名&#xff1a; E_mail: 留 言 html文本框参考样式 输入框景背景透明&#xff1a; 鼠标划过输入框&#xff0c;输入框…

html 文本域和文本框,html的文本框和文本域样式

如果前边几章学习的比较扎实的话,本节教程就相当容易了。下边先说一下文本框,文本框和文本域都是可以用css进行美化的。比如改变边框精细,颜色,添加背景色、背景图像等。请看下边的实例: .text1 { border:1px solid #f60; color:#03C;} .text2 { border:2px solid #390; w…

[微信小程序专题] 配置文本框样式、排版及点击页面跳转

欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。 问题 如何更改小程序页面中的文本框颜色和边框样式? 如何实现多个文本框的排版? 如何实现点击一个文本框即跳转页面? 我们在使用一个小程序…

php输入文本框样式,【js】:检测用户输入、文本框默认样式设置、设计表格样式实现全选反选...

Topic 1 : 检测用户的输入 &#xff1a; 题目要求&#xff1a; 编写一个用户注册页面 检测用户名是否是6位以下&#xff0c;密码是否是8位以上&#xff0c;如果不满足要求高亮显示文本框 &#xff1b; 代码如下 &#xff1a;用户注册页面 .bg {background-color: red; } //编写…

html语言文本框怎么做,HTML文本框参考样式

在网页设计中,常常要使用html文本框来收集一些用户信息或是制作登录页,虽然只是简单的输入框,但是如果加入一些美化设计会使你的页面看起来更加有吸引力,下面就给大家提供了一些html文本框的参考样式和常见的html操作技巧,希望对你的网页制作有帮助。首先我们先看看一个最…

vue改造textarea多行文本框样式

代码如下&#xff08;有注释&#xff09;,因为这个是h5&#xff0c;如果需要pc端的&#xff0c;自行把rem乘100转换成px <template> <div class"contain"><textarea v-model"textareaSeason"placeholder"请输入具体原因"class&q…

html input文本框样式,css设置input文本框样式代码实例_html/css_WEB-ITnose

css设置input文本框样式代码实例: 使用css设置input元素的样式是最为常用的操作之一&#xff0c;当然也是最为基础的操作&#xff0c;可能对于刚刚接触css的朋友还不够熟悉&#xff0c;下面就通过一段简单的代码历史演示一下如何设置文本框的样式&#xff0c;当然这个演示可能并…

CSS之文本框样式和水平居中

文章目录 1 CSS使用1.1 文本框样式1.1.1 鼠标一上去变成浅绿色1.1.2 文本框提示样式&#xff0c;鼠标点击获得焦点时提示内容消失1.1.3 input文本框样式1.1.4 只有下划线的文本框1.1.5 软件序列号式的输入框1.1.6 输入框景背景透明1.1.7 鼠标划过输入框&#xff0c;输入框背景色…

【Css】input输入文本框的样式大全和搜索框实例(图文和完整源码)

一、默认显示信息 <input type"text" required"required" placeholder" 请输入金额" name"u"onfocus"if(placeholder 请输入金额){placeholder}"onblur"if(placeholder){placeholder 请输入金额}"v-model:v…

文本框输入的样式

文本框文字的输入样式设计&#xff0c;这里分四种样式&#xff1a; 1、从左到右 2、从右到左 3、从中间到两边 4、两端对齐 效果如下&#xff1a; TextAlignAt.css文件&#xff1a; .left {text-align: left;border: 1px dotted black;width: 50%;}.right {text-align: r…

HTML滚动条

由于四象限中可能会有很多任务&#xff0c;可能会超出象限大小&#xff0c;所以需要加上滚动条。 一般是&#xff1a;overflow:auto这个属性; 同时简单介绍几种HTML滚动条代码&#xff1a; 1、向右滚动代码&#xff1a; <div id"colee_right" style"overf…

html中设置滚动条的样式

一、效果图 二、css ::-webkit-srollbar-track-piece{background:none;-webkit-border-radius:0;} ::-webkit-scrollbar{width:8px;height:8px;} ::-webkit-scrollbar-thumb:vertical{height:50px;background-color:#bbbbbb;-webkit-border-radius:4px;outline:0px solid #…

(css)滚动条样式

(css)滚动条样式 效果&#xff1a; /*滚动条整体样式*/ ::-webkit-scrollbar {width: 2px;/*高宽分别对应横竖滚动条的尺寸*/height: 10px; } ::-webkit-scrollbar-thumb {/*滚动条里面小方块*/border-radius: 10px;width: 2px;height: 60px;background: linear-gradient(0deg,…

vue修改滚动条样式的方法

这篇文章主要介绍了vue修改滚动条样式,首先要知道&#xff0c;修改滚动条样式&#xff0c;利用伪元素-webkit-scrollbar。下面来看看文章内容的具体实现吧 目录 首先要知道&#xff0c;修改滚动条样式&#xff0c;利用伪元素-webkit-scrollbar。 注意&#xff0c; ::-webkit-…

CSS自定义滚动条样式

CSS自定义滚动条样式 测试html内容 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&…

CSS 滚动条: 自定义滚动条样式

CSS 滚动条: 自定义滚动条样式 文章目录 CSS 滚动条: 自定义滚动条样式前言正文overflow & ::-webkit-scrollbar实际效果&#xff08;自定义滚动条、隐藏滚动条&#xff09; 结语其他资源参考连接完整代码示例 前言 本篇来介绍如何为自己的网页定制化自己的滚动条 正文 …

css如何修改滚动条样式

默认滚动条样式如下: 那如何修改呢?如下代码: <div class="inner"> <div class="innerbox"> <p style="height:200px;">这是内容111</p> <p style="height:400px;">这里是…

浏览器自定义滚动条样式

当一段文本过长&#xff0c;使用overflow:auto属性后&#xff0c;这段文本所在区域将会出现滚动条。有时候&#xff0c;我们需要自定义浏览器的滚动条样式&#xff0c;可以使用css3的scrollbar-thumb属性来实现。 首先看一下这个属性的兼容性。 可见这个属性在pc端支持的并不…