大数据之线程学习

简介:   为什么要让run()方法自动开启。  cpu有随机性,线程抢到cpu,才能干活,所以run()方法必须通过strat()方法自动启动,这样cpu就获得了一个信号,知道该线程可以抢占cpu资源;手动运行垃圾回收器原理:当执行gc是,会触发垃圾回收机制,开启垃圾回收线程,执行finalize方...

  为什么要让run()方法自动开启。
  cpu有随机性,线程抢到cpu,才能干活,所以run()方法必须通过strat()方法自动启动,这样cpu就获得了一个信号,知道该线程可以抢占cpu资源;

手动运行垃圾回收器

原理:当执行gc是,会触发垃圾回收机制,开启垃圾回收线程,执行finalize方法

cpu的特性:多个线程之间是抢cpu的关系,cpu有随机性

主函数结束,主任务区结束,主线程随着任务的结束而结束,线程随着任务的开始而开始

创建线程

默认情况下,主线程和垃圾回收线程都是由系统创建

①用Thread创建线程对象

Thread thread1=new Thread(); //只是创建Thread对象
thread1.start(); //开启线程
Thread类里的run()方法默认是空的,所以start()方法执行结果
所以需要继承Thread类 重写run()方法
若run()方法直接被手动调用,run()对应的线程跟调用该方法所在的线程对应
Thread类实现了Runnable接口,Runnable接口里面只有run()方法,Thread类里实现的run()方法也只是空方法体,需要被继承去重写

创建一个A类实现Runnable接口,重写run()方法
A a=new A();
Thread to=new Thread(A);
to.start();
给某个方法的线程冲突部分加锁
锁的条件
①锁必须是对象
②要被所有的线程共享

同步代码块
synchronized(this){代码块}

同步函数
非静态 public synchronized void xxx(){} //默认的锁是this synchronized(this)
静态 public synchronized static void xxx(){} //默认的锁是当前类的字节码文件 synchronized(xx.class)
notify(终止线程休眠) wait(线程休眠,不可以抢占cpu)
wait()-->必须在同步环境中使用,必须使用锁调用,执行这行代码,对应的是哪个线程,就
notify()-->唤醒的是同一把锁下的线程,
Lock(显示同步) 替换 Synchronized(隐式同步)

//创建锁对象 Lock lock=new ReentrantLock();
//用于生产任务的Condition
Condition proCon = lock.newCondition();

//用于结束任务的condition
Condition conCon = lock.newCondition();

//开启锁
lock.lock();
proCon.await();
conCon.signal();
conCon.await();
proCon.signal();

//关闭锁
lock.unlock();

守护线程
当程序调用setDaemon方法时,并且将参数设置成true,当前线程就变成了了守护线程,只要主线程结束,该守护线程就会结束,这个方法一定要在start前调用
join()方法,优先级高于主线程,主线程会等当前的线程执行完后再去执行;该方法是在start之后。

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
7月前
|
数据采集 搜索推荐 算法
Java 大视界 -- Java 大数据在智能教育学习社区用户互动分析与社区活跃度提升中的应用(274)
本文系统阐述 Java 大数据技术在智能教育学习社区中的深度应用,涵盖数据采集架构、核心分析算法、活跃度提升策略及前沿技术探索,为教育数字化转型提供完整技术解决方案。
|
分布式计算 大数据 Java
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
212 5
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
167 3
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
274 0
|
12月前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
290 10
|
数据采集 数据可视化 大数据
大数据体系知识学习(三):数据清洗_箱线图的概念以及代码实现
这篇文章介绍了如何使用Python中的matplotlib和numpy库来创建箱线图,以检测和处理数据集中的异常值。
384 1
大数据体系知识学习(三):数据清洗_箱线图的概念以及代码实现
|
分布式计算 大数据 Hadoop
大数据学习
【10月更文挑战第2天】大数据学习
467 16
|
监控 Java 调度
【Java学习】多线程&JUC万字超详解
本文详细介绍了多线程的概念和三种实现方式,还有一些常见的成员方法,CPU的调动方式,多线程的生命周期,还有线程安全问题,锁和死锁的概念,以及等待唤醒机制,阻塞队列,多线程的六种状态,线程池等
1177 6
【Java学习】多线程&JUC万字超详解
|
存储 SQL 分布式计算
大数据学习
【10月更文挑战第15天】
337 1
|
分布式计算 大数据 Linux
大数据体系知识学习(二):WordCount案例实现及错误总结
这篇文章介绍了如何使用PySpark进行WordCount操作,包括环境配置、代码实现、运行结果和遇到的错误。作者在运行过程中遇到了Py4JJavaError和JAVA_HOME未设置的问题,并通过导入findspark初始化和设置环境变量解决了这些问题。文章还讨论了groupByKey和reduceByKey的区别。
246 1

热门文章

最新文章