大数据之多线程学习笔记

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介:   默认情况下,主线程和垃圾回收线程都是由系统创建的,但是我们需要完成自己的功能----创建自己的线程对象。java将线程面向对象了,形成的类就是Thread,在Thread类内部执行任务的方法叫run()注意:如果想让run作为任务区,必须让他去被自动调用.

  默认情况下,主线程和垃圾回收线程都是由系统创建的,但是我们需要完成自己的功能----创建自己的线程对象。

  • java将线程面向对象了,形成的类就是Thread,在Thread类内部执行任务的方法叫run()
  • 注意:如果想让run作为任务区,必须让他去被自动调用.我们通过执行start()方法,来开启线程,继而实现run方法的自动调用.

直接使用Thread创建线程对象

// //分析:由于我们实现的实际功能Thread类是决定不了的,所以没有办法将我们的功能放入Thread的run方法里
// //所以Thread的run 方法是一个空方法.如果我们想实现自己的功能,可以写Thread类的子类,重写run方法

当我们手动调用run的时候,他失去了任务区的功能,变成了一个普通的方法.

    //当run作为一个普通方法时,内部对应的线程跟调用他的位置保持一致.

锁的条件:

​ * 1.锁必须是对象 普通的对象/this/字节码文件

         * 2.要被所有的线程共享
         * 
         * 注意:字节码文件的使用范围太大,一般不建议使用.

空唤醒

Lock锁

使用步骤

​ 1.创建ReentrantLock lock = new ReentrantLock();对象,需要注意的是多个线程必须使用同一个

​ 2.把之前的synchronized(锁){ 用lock.lock()替换

​ 3.把} 用lock.unlock();替换

好处

​ 1.不要考虑锁对象

​ 2.代码看起来更加简洁了

​ 3.可以使用try..catch..finaly把lock.unlock放到finaly中,好处是如果该线程发生了异常,照样可以释放锁

比较synchronized和Lock

  • 1.synchronized:从jdk1.0就开始使用的同步方法-称为隐式同步

    • synchronized(锁对象)
    • {//获取锁 我们将锁还可以称为锁旗舰或者监听器

       同步的代码}//释放锁
      
  • 2.Lock:从jdk1.5开始使用的同步方法-称为显示同步
  • 原理:Lock本身是接口,要通过他的子类创建对象干活儿
  • 使用过程:
  • 首先调用lock()方法获取锁
  • 进行同步的代码块儿
  • 使用unlock()方法释放锁
  • 使用的场景:
  • 当进行多生产者多消费者的功能时,使用Lock,其他的都使用synchronized
  • 使用效率上:Lock高于synchronized

多线程的单例

//饿汉式,由于公共方法中只有一行公共的代码,所以不会产生线程安全问题
class SingleInstance1{

private static final SingleInstance1 s = new SingleInstance1();
private SingleInstance1() {
}
public static SingleInstance1 getInstance() {
    return s;
}

}

//懒汉式,
class SingleInstance2{

private static  SingleInstance2 s = null;
private SingleInstance2() {
}
public  static SingleInstance2 getInstance() {
    if (s == null) {//尽量减少线程安全代码的判断次数,提高效率
        

        synchronized (SingleInstance2.class) {//使用同步代码块儿实现了线程安全
            if (s == null) {
                s = new  SingleInstance2();
            }
        }
    }
    return s;
}

线程停止

​ 1.通过一个标识结束线程

​ 2.调用stop方法---因为有固有的安全问题,所以系统不建议使用.

​ 3.调用interrupt方法----如果目标线程等待很长时间(例如基于一个条件变量),则应使用 interrupt 方法来中断该等待。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
4月前
|
SQL 分布式计算 大数据
Python+大数据学习笔记(一)
Python+大数据学习笔记(一)
62 0
|
4月前
|
大数据 Linux 网络安全
大数据开发工程师基本功修炼之史上最全Linux学习笔记(建议)
大数据开发工程师基本功修炼之史上最全Linux学习笔记(建议)
175 0
|
4月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
95 0
|
1月前
|
调度
多线程学习笔记
这篇文章是多线程学习笔记,涵盖了线程与进程的概念、多线程实现方式、线程状态、线程同步与不安全示例、死锁问题以及生产者与消费者问题等多线程编程的关键知识点。
多线程学习笔记
|
4月前
|
NoSQL 网络协议 关系型数据库
redis-学习笔记(redis 单线程模型)
redis-学习笔记(redis 单线程模型)
45 3
|
4月前
|
安全 Java 编译器
多线程 (下) - 学习笔记2
多线程 (下) - 学习笔记
38 1
|
4月前
|
存储 算法 Java
多线程 (下) - 学习笔记1
多线程 (下) - 学习笔记
42 1
|
4月前
|
设计模式 安全 NoSQL
多线程 (上) - 学习笔记2
多线程 (上) - 学习笔记
41 1
|
4月前
|
Java 数据库连接 程序员
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
53 4
|
4月前
多线程学习笔记(一)
创建线程有3种方式:继承Thread类、实现Runnable接口或Callable接口。继承Thread类时,重写run()方法并调用start()启动线程。实现Runnable接口时,实现run()方法,通过Thread的target创建线程对象并用start()启动。
25 1