Java与Scala中的线程与并发编程学习笔记

版权申诉
0 下载量 60 浏览量 更新于2024-09-29 收藏 1.41MB ZIP 举报
资源摘要信息:"Java、Scala、线程、多线程、并发编程" 1. Java编程语言基础 Java是一种广泛使用的面向对象的编程语言,它以“一次编写,到处运行”的理念受到开发者的青睐。Java平台包含了一系列标准库,为开发者提供了丰富的功能支持,包括集合框架、网络编程、文件I/O等。Java虚拟机(JVM)是运行Java字节码的环境,它允许Java程序跨平台运行。 2. Scala编程语言概述 Scala是一种多范式的编程语言,它集成了面向对象编程和函数式编程的特性。Scala设计的目标是兼容Java平台,允许无缝使用现有的Java库。由于其简洁的语法和强大的类型系统,Scala在大数据处理、并发编程等方面表现出色。 3. 线程的基本概念 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个标准的线程拥有自己的调用栈、程序计数器和线程局部存储。在多线程环境中,线程可以共享进程的资源,但同时拥有自己的执行序列。 4. 多线程编程基础 多线程编程是指在同一进程中启动和管理多个线程,以实现并行执行多个任务的目的。多线程编程的优点包括提高程序的执行效率、改善用户体验,以及更好地利用多核处理器的计算能力。然而,多线程编程也引入了复杂性,如线程安全、死锁、资源竞争等问题。 5. 并发编程详解 并发编程是指一种编写程序的技术,它允许多个计算任务同时进行。在并发模型中,任务之间的切换可以在非常短的时间内完成,使得它们看起来像是同时运行。并发编程可以进一步细分为并行性和并发性: - 并行性:指在同一时刻,有多个处理器同时执行多个任务。 - 并发性:指在同一时间间隔内,有多个任务被系统交替执行。 在Java中,实现并发编程的技术包括使用Thread类创建线程、实现Runnable接口,以及使用Java并发工具包(java.util.concurrent)中的高级抽象如ExecutorService、Future、Callable等。 6. Java并发工具包介绍 Java并发工具包是Java提供的专门用于解决并发问题的一组类和接口,它位于java.util.concurrent包及其子包中。该工具包提供了一系列构建并发应用程序的高级构建块,包括线程池、锁、原子变量、同步器等。这些构建块能够简化并发编程的复杂性,并减少常见的并发问题。 7. Scala的并发编程模型 Scala提供了多种并发编程模型,包括传统的线程和锁机制,以及更高级的并发工具。Scala的actor模型是通过Akka框架来实现的,它提供了一种并发模型,以消息传递的方式来处理并发,Actor模型中的每个actor是一个轻量级的并发实体,它有自己的状态和行为,并通过消息与其他actor通信。 8. 并发编程在实际应用中的挑战 在实际应用中,并发编程可能会遇到多种挑战,例如资源竞争、死锁、活锁、线程饥饿、上下文切换开销等问题。解决这些挑战需要深入理解并发控制机制、同步策略和性能优化方法。良好的设计模式和最佳实践可以帮助减少并发带来的问题,提高程序的可靠性和性能。 9. Java内存模型和线程安全 Java内存模型定义了共享变量的访问规则,以及如何在多线程环境中正确地对这些变量进行读写。线程安全是指当多个线程访问某个类时,该类始终能够表现出正确的行为。在Java中,可以通过synchronized关键字、volatile关键字以及其他并发工具类来保证线程安全。 10. Scala和Java在并发编程中的相互借鉴 尽管Scala和Java是两种不同的编程语言,它们在并发编程领域有很多相通之处。Java的并发编程模型对Scala有较大影响,反之Scala也对Java并发编程的发展作出了贡献。例如,Scala的Future和Promise概念被Java采用,并纳入到了java.util.concurrent包中。 综上所述,Java、Scala在处理线程、多线程以及并发编程时提供了一系列强大的工具和概念。了解和掌握这些知识点对于开发高性能、可扩展的系统至关重要。

Exception in thread "main" java.lang.RuntimeException: java.lang.NoSuchFieldException: DEFAULT_TINY_CACHE_SIZE at org.apache.spark.network.util.NettyUtils.getPrivateStaticField(NettyUtils.java:131) at org.apache.spark.network.util.NettyUtils.createPooledByteBufAllocator(NettyUtils.java:118) at org.apache.spark.network.server.TransportServer.init(TransportServer.java:95) at org.apache.spark.network.server.TransportServer.<init>(TransportServer.java:74) at org.apache.spark.network.TransportContext.createServer(TransportContext.java:114) at org.apache.spark.rpc.netty.NettyRpcEnv.startServer(NettyRpcEnv.scala:118) at org.apache.spark.rpc.netty.NettyRpcEnvFactory$$anonfun$4.apply(NettyRpcEnv.scala:454) at org.apache.spark.rpc.netty.NettyRpcEnvFactory$$anonfun$4.apply(NettyRpcEnv.scala:453) at org.apache.spark.util.Utils$$anonfun$startServiceOnPort$1.apply$mcVI$sp(Utils.scala:2237) at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:160) at org.apache.spark.util.Utils$.startServiceOnPort(Utils.scala:2229) at org.apache.spark.rpc.netty.NettyRpcEnvFactory.create(NettyRpcEnv.scala:458) at org.apache.spark.rpc.RpcEnv$.create(RpcEnv.scala:56) at org.apache.spark.SparkEnv$.create(SparkEnv.scala:246) at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:175) at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:257) at org.apache.spark.SparkContext.<init>(SparkContext.scala:432) at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2509) at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:909) at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:901) at scala.Option.getOrElse(Option.scala:121) at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:901) at com.cssl.scala720.KafkaSparkStreamingHBase$.main(KafkaSparkStreamingHBase.scala:28) at com.cssl.scala720.KafkaSparkStreamingHBase.main(KafkaSparkStreamingHBase.scala) Caused by: java.lang.NoSuchFieldException: DEFAULT_TINY_CACHE_SIZE at java.lang.Class.getDeclaredField(Class.java:2070) at org.apache.spark.network.util.NettyUtils.getPrivateStaticField(NettyUtils.java:127) ... 23 more Process finished with exit code 1

2023-07-24 上传

报错Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties 23/06/01 20:24:22 INFO SparkContext: Running Spark version 2.0.0 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/map/UnmodifiableMap at org.apache.hadoop.conf.Configuration$DeprecationContext.<init>(Configuration.java:409) at org.apache.hadoop.conf.Configuration.<clinit>(Configuration.java:448) at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:260) at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:790) at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:760) at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:633) at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2245) at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2245) at scala.Option.getOrElse(Option.scala:121) at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2245) at org.apache.spark.SparkContext.<init>(SparkContext.scala:297) at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2256) at org.apache.spark.sql.SparkSession$Builder$$anonfun$8.apply(SparkSession.scala:831) at org.apache.spark.sql.SparkSession$Builder$$anonfun$8.apply(SparkSession.scala:823) at scala.Option.getOrElse(Option.scala:121) at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:823) at spark.sparkMysql$.main(sparkToMysql.scala:11) at spark.sparkMysql.main(sparkToMysql.scala) Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.map.UnmodifiableMap at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 18 more Process finished with exi

2023-06-02 上传

2023-06-02 23:12:37 WARN NativeCodeLoader:60 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). Traceback (most recent call last): File "mysqlTest.py", line 12, in <module> jdbcDF=spark.read.format("jdbc").option("url","jdbc:mysql://localhost:3306/sparktest?useSSL=false").option("driver","com.mysql.cj.jdbc.Driver").option("dbtable","employee").option("user", "root").option("password", "123456").load() File "/usr/local/spark/python/pyspark/sql/readwriter.py", line 172, in load return self._df(self._jreader.load()) File "/usr/local/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__ File "/usr/local/spark/python/pyspark/sql/utils.py", line 63, in deco return f(*a, **kw) File "/usr/local/spark/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py", line 328, in get_return_value py4j.protocol.Py4JJavaError: An error occurred while calling o31.load. : java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at org.apache.spark.sql.execution.datasources.jdbc.DriverRegistry$.register(DriverRegistry.scala:45) at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$5.apply(JDBCOptions.scala:99) at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$5.apply(JDBCOptions.scala:99) at scala.Option.foreach(Option.scala:257) at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:99) at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:35) at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:32) at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:318) at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:223) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:211) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:167) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) at py4j.Gateway.invoke(Gateway.java:282) at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) at py4j.commands.CallCommand.execute(CallCommand.java:79) at py4j.GatewayConnection.run(GatewayConnection.java:238) at java.lang.Thread.run(Thread.java:748)

2023-06-03 上传