多线程

小编 2026-06-24 阅读:829 评论:0
一个程序运行后至少有一个进程,一个进程中可以包含多个线程,但至少包含一个线程, 一个线程与父进程的其他线程共享该进程所拥有的全部资源。   继承Thread类创建线程类 1.定义thread类的子类...

一个程序运行后至少有一个进程,一个进程中可以包含多个线程,但至少包含一个线程,

一个线程与父进程的其他线程共享该进程所拥有的全部资源。

 

继承Thread类创建线程类

1.定义thread类的子类,并重写该类的run方法(线程执行体),

该run方法就是代表线程需要完成的任务。

2.创建Thread子类的实例,即创建线程对象。

 

进行多线程编程时不要忘记了Java程序运行时默认的主线程,main()方法的方法体就是主线程的线程执行体。

使用继承Thread类的方法来创建线程类时,多个线程之间无法共享线程类的实例变量

 

线程都是通过拓展Thread类创建的,同时也可以使用Runnable接口来创建线程类

1.定义Runnable接口的实现类,并重写该接口的方法,这个代表此个方法中的线程执行体。

2.创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。

//创建Runnable实现类的对象

SecondThread st=new SecondThread();

//以Runnable实现类的对象作为Thread的target来创建Thread对象,即线程对象

new Thread(st)或 new Thread(st,\"新线程1\");

3.调用线程对象的start方法来启动该线程

 

启动线程使用start()方法,而不是run()方法,永远不要调用线程对象的run方法,调用start方法来启动线程,系统会把该run方法当成线程执行体来处理;

 

如果希望调用子线程的start方法后子线程立即开始执行,程序可以使用Thread.sleep(1)来让当前运行的线程睡眠1毫秒,因为1毫秒内CPU不会空闲,它会去执行另一个处于就绪状态的线程,这样就可以让子线程立即开始执行.

 

如果处于就绪状态的线程获得了CPU,开始执行run方法的线程执行体,则线程处于运行状态,但一个CPU在任何时刻只能有一个线程处于运行状态,当一个线程开始运行后,它不可能一直处于运行状态,线程在运行过程中需要被中断,目的是使其他线程获得执行的机会,线程调度的细节取决于底层平台所采用的策略。对于采用抢占式策略的系统而言,系统会给每个可执行的线程一个小时间段来处理任务;当该时间段用完后,系统就会剥夺该线程所占用的资源,让其他线程获得执行的机会。

一个CPU在任何时刻只能有一个线程处于运行状态。

 

使线程进入阻塞状态的几种情况:

1.线程调用sleep()方法主动放弃所占用的处理器资源。

2.调用一个阻塞式IO方法,在该方法返回之前,该线程被阻塞。

3.等待某个通知。

4.调用suspend()方法将该线程挂起

 

让线程重新进入就绪状态的几种情况:

1.调用sleep()方法的线程经过了指定时间。

2.线程调用的阻塞式IO方法已经返回。

3.成功获得了试图取得的同步监听器。

4.线程正在等待某个通知,其他线程发出了一个通知。

5.处于挂起状态的线程suspend()被调用了resume()恢复方法。

 

线程会以下面三种方式结束,结束后就处于死亡状态:

(1)run()或call()方法执行完成,线程正常结束

(2)线程抛出一个未捕获的Exception或Error

(3)直接调用该线程的stop()方法来结束该线程

 

调用Thread对象setDaemon(true)方法可将指定线程设置成后台线程。

static void sleep(long millis):让当前正在执行的线程暂停millis毫秒,并进入阻塞状态,该方法受到系统计时器和线程调度器的精度和准确度的影响。

 

setPriority(int newPriority) 来设置指定线程的优先级。

 

同步方法就是使用synchronized关键字来修饰某个方法,

某个对象调用了同步方法,该对象上的其他同步方法必须等待该同步方法执行完毕才能被执行,必须将每个能访问共享资源的方法修饰为synchronized,否则就会出错

// 提供一个线程安全draw()方法来完成取钱操作

public synchronized void draw(double drawAmount)

 

 

wait()方法,导致当前线程等待

notify()方法,唤醒在此同步监听器上等待的单个线程。

 

线程组成:

栈空间 局部变量 独立

堆空间 保存对象 共享

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表