java——多线程基础

 更新时间:2021年07月12日 09:41:28   作者:wbcra  
Java多线程实现方式有两种,第一种是继承Thread类,第二种是实现Runnable接口,两种有很多差异,下面跟着本文一起学习吧,希望能给你带来帮助

并发与并行:

并行: 指两个或多个事件在同一时刻发生 ( 同时发生 ) 。

并发: 指两个或多个事件在同一个时间段内发生。

多线程使用场景:

1. 后台任务,比如游戏服务器

2.定时向大量用户(100W)用户发邮件

3.异步处理: 发微博/记录日志等

4.分布式计算...

线程和进程区别:

进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多 个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创 建、运行到消亡的过程。

线程:进程内部的一个独立执行单元;一个进程可以同时并发的运行多个线程,可以理解为一个进程便相当 于一个单 CPU 操作系统,而线程便是这个系统中运行的多个任务。

创建线程的方式:

继承Thread类

1) 定义子类继承Thread类。

2) 子类中重写Thread类中的run方法。

3) 创建Thread子类对象,即创建了线程对象。

4) 调用线程对象start方法:启动线程,调用run方法。

Thread类的有关方法:

void start() : 启动线程,并执行对象的run()方法

run() : 线程在被调度时执行的操作

String getName() : 返回线程的名称

void setName(String name) :设置该线程名称

static Thread currentThread() : 返回当前线程。在Thread子类中就是this,通常用于主线程和Runnable实现类

static void yield() :线程让步

暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程

若队列中没有同优先级的线程,忽略此方法

join() :当某个程序执行流中调用其他线程的 join() 方法时,调用线程将被阻塞,直到 join() 方法加入的 join 线程执行完为止 低优先级的线程也可以获得执行

static void sleep(long millis) :(指定时间:毫秒)

令当前活动线程在指定时间段内放弃对CPU控制,使其他线程有机会被执行,时间到后重排队。

抛出InterruptedException异常

l stop(): 强制线程生命期结束,不推荐使用

boolean isAlive():返回boolean,判断线程是否还活着

线程的同步:

模拟火车站售票程序

线程的同步:synchronized

解决办法:

对多条操作共享数据的语句,让一个线程都执行完,执行过程中,其他线程不可以参与执行。

Java对于多线程的安全问题提供了专业的解决方式同步机制

1. 同步代码块:

synchronized (对象){

// 需要被同步的代码;

}

2. synchronized还可以放在方法声明中,表示整个方法为同步方法。

例如:

public synchronized void show (String name){

….

}

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • SpringBoot Knife4j在线API文档框架基本使用

    SpringBoot Knife4j在线API文档框架基本使用

    knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,这篇文章主要介绍了SpringBoot中使用Knife4J在线API文档框架,需要的朋友可以参考下
    2022-12-12
  • 详解自定义SpringMVC的Http信息转换器的使用

    详解自定义SpringMVC的Http信息转换器的使用

    这篇文章主要介绍了详解自定义SpringMVC的Http信息转换器的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 基于RabbitMQ几种Exchange 模式详解

    基于RabbitMQ几种Exchange 模式详解

    下面小编就为大家带来一篇基于RabbitMQ几种Exchange 模式详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Java毕业设计实战之教室预订管理系统的实现

    Java毕业设计实战之教室预订管理系统的实现

    这是一个使用了java+SpringBoot+Maven+Vue+mysql开发的教室预订管理系统,是一个毕业设计的实战练习,具有教室预订管理该有的所有功能,感兴趣的朋友快来看看吧
    2022-02-02
  • springboot中使用redis由浅入深解析

    springboot中使用redis由浅入深解析

    这篇文章主要由浅入深为大家介绍了springboot中使用redis的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Maven2 plugin开发教程详解

    Maven2 plugin开发教程详解

    这篇文章主要为大家详细介绍了Maven2 plugin的开发教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • SpringBoot无法访问/static下静态资源的解决

    SpringBoot无法访问/static下静态资源的解决

    这篇文章主要介绍了SpringBoot无法访问/static下静态资源的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java打印九九乘法表代码详情

    Java打印九九乘法表代码详情

    这篇文章主要介绍了Java打印九九乘法表,使用了双重for循环,使用do{}while()实现打印九九乘法表这些好玩的语法实现,感兴趣的小伙伴可参考下面文章内容
    2021-09-09
  • IDEA Maven依赖下载总是失败的几种解决方法

    IDEA Maven依赖下载总是失败的几种解决方法

    我们本地使用 IDEA 运行 maven 项目的时候,有时候运气不好,就会遇到某些 maven 依赖无法正常找到、导入,这就会导致 IDEA 构建项目的时候爆出一堆醒目的红色 Error,今天给大家分享IDEA Maven依赖下载总是失败的几种解决方法,感兴趣的朋友一起看看吧
    2023-09-09
  • java实现随机生成UUID

    java实现随机生成UUID

    这篇文章主要介绍了java实现随机生成UUID的函数代码,有需要的小伙伴可以参考下。
    2015-07-07

最新评论