线程定义(定义线程的两种方法

dylinchen 1329 2022-11-30

本文目录一览:

什么是线程?有什么用 讲得通俗点

1、线程的定义

线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元。

线程,在网络或多用户环境下,一个服务器通常需要接收大量且不确定数量用户的并发请求,为每一个请求都创建一个进程显然是行不通的,——无论是从系统资源开销方面或是响应用户请求的效率方面来看。因此,操作系统中线程的概念便被引进了。

线程,是进程的一部分,一个没有线程的进程可以被看作是单线程的。线程有时又被称为轻权进程或轻量级进程,也是 CPU 调度的一个基本单位。

2、线程的作用:

线程的作用很多,举个最为典型的例子:

当需要在网络上放一个服务端,一个客户端访问时,就会新建一个线程处理这个客户端的事务,这样的话只要不断新建线程就可以处理多个用户的请求了。

扩展资料

线程的五种状态:

1、新生状态(New)

当一个线程的实例被创建即使用new关键字和Thread类或其子类创建一个线程对象后,此时该线程处于新生状态。 此时线程不是活着的(not alive);

2、就绪状态(Runnable)

通过调用线程实例的start()方法来启动线程使线程进入就绪状态;但还没有被分配到CPU,处于线程就绪队列;此时线程是活着的(alive)。

3、运行状态(Running)

一旦获取CPU,线程就进入运行状态,线程的run()方法才开始被执行,如果在给定的时间内没有执行结束,就会被系统给换下来回到线程的就绪状态,此时线程是活着的(alive)。

4、阻塞状态(Blocked)

通过调用join()、sleep()、wait()或者资源被暂用使线程处于阻塞状态,此时线程是活着的(alive)。

5、死亡状态(Dead)

当一个线程的run()方法运行完毕或被中断或被异常退出,该线程到达死亡状态。处于Dead状态调用start()方法,会出现异常。

参考资料:百度百科-线程

什么是线程??

是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。

线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程.

线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU

线程的周期

新建 就绪 运行 阻塞 死亡

线程调度与优先级

有线程进入了就绪状态,需要有线程调度程序来决定何时执行,根据优先级来调度.

线程组

每个线程都是一个线程组的一个成员,线程组把多个线程集成一个对象,通过线程组可以同时对其中的多个线程进行操作.在生成线程时必须将线程放在指定的线程组,也可以放在缺省的线程组中,缺省的就是生成该线程的线程所在的线程组.一旦一个线程加入了某个线程组,不能被移出这个组.

守护线程

是特殊的线程,一般用于在后台为其他线程提供服务.

isDaemon():判断一个线程是否为守护线程.

set Daemon():设置一个线程为守护线程.

Thread类和Runnable接口

Thread类

类Thread在包java.lang中定义,它的构造方法如下:

public Thread();

public Thread(Runnable target);

public Thread(Runnable target,String name);

public Thread(String name);

public Thread(ThreadGroup group,Runnable target);

public Thread(ThreadGroup group, String name);

主要方法

isActive() 判断是否处于执行状态

Suspend() 暂停执行

reSume 恢复执行

start() 开始执行

Stop() 停止执行

sleep() 睡眠

run() 程序体

yield() 向其他线程退让运行权

线程优先级

Public statuc final int MAX_PRIORITY最高优先级,10

Public statuc final int MIN_PRIORITY最低优先级,1

Public statuc final int NORM_PRIORITY普通优先级,5

Runnable接口

Runnable接口中只定义了一个方法run()作为线程体,

void run()

Java的线程是通过java.lang.Thread类来实现的。

VM启动时会有一个由主方法(public static void main(){})所定义的线程。

可以通过创建Thread的实例来创建新的线程。

每个线程都是通过某个特定的Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。

通过调用Thread类的start()方法来启动一个线程

Java里面实现多线程,有2个方法

1 继承 Thread类,比如

class MyThread extends Thread {

public void run() {

// 这里写上线程的内容

}

public static void main(String[] args) {

// 使用这个方法启动一个线程

new MyThread().start();

}

}

2 实现 Runnable接口

class MyThread implements Runnable{

public void run() {

// 这里写上线程的内容

}

public static void main(String[] args) {

// 使用这个方法启动一个线程

new Thread(new MyThread()).start();

}

}

一般鼓励使用第二种方法,应为Java里面只允许单一继承,但允许实现多个接口。第二个方法更加灵活。

什么叫线程

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

扩展资料:

多线程原理:

实现多线程是采用一种并发执行机制。

并发执行机制原理:简单地说就是把一个处理器划分为若干个短的时间片,每个时间片依次轮流地执行处理各个应用程序,由于一个时间片很短,相对于一个应用程序来说,就好像是处理器在为自己单独服务一样,从而达到多个应用程序在同时进行的效果。

多线程就是把操作系统中的这种并发执行机制原理运用在一个程序中,把一个程序划分为若干个子任务,多个子任务并发执行,每一个任务就是一个线程。这就是多线程程序。

参考资料来源:百度百科-多线程

参考资料来源:百度百科-线程

线程与进程的区别和联系

1:线程定义

线程是进程的基本执行单元,一个进程的所有任务都在线程中执行

进程要想执行任务,必须得有线程,进程至少要有一条线程

程序启动会默认开启一条线程,这条线程被称为主线程或 UI 线程

2:进程定义

进程是指在系统中正在运行的一个应用程序

每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存

3:进程与线程的区别

地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。

资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。

一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程

执行过程:每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

线程是处理器调度的基本单位,但是进程不是。

4:多线程的意义

优点

能适当提高程序的执行效率

能适当提高资源的利用率(CPU,内存)

线程上的任务执行完成后,线程会自动销毁

缺点

开启线程需要占用一定的内存空间(默认情况下,每一个线程都占 512 KB)

如果开启大量的线程,会占用大量的内存空间,降低程序的性能

线程越多,CPU 在调用线程上的开销就越大

程序设计更加复杂,比如线程间的通信、多线程的数据共享

5:多线程的原理

(单核cpu)同一时间,cpu只能处理 1 个线程。换言之,同一时间只有 1 个线程在执行

多线程同时执行:

*是 cpu 快速的在多个线程之间的切换

* cpu 调度线程的时间足够快,就造成了多线程的“同时”执行效果

如果线程数非常多

* cpu 会在 N 个线程直接切换,消耗大量的 cpu 资源

* 每个线程调度的次数会降低,线程的执行效率降低

b6529cdc6ae55c38a787b658f4e1dd65_20221105065208_87426.jpg

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【python爬虫】第3章——Python网络爬虫第一弹《Python网络爬虫相关基础概念》
下一篇:ios移动端开发(iOS客户端开发)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~