面向对象用来组织程序是好,但我用C 我用C++,函数式编程的好,跟我有什么关系 动态语言那些特性很好,可惜我用Java …… 如果你这么想,说明你被自己的看家本事给局限住了,这种思维方式会让你即便学到了更多好东西...语言那么多,我要一个一个都学过去吗?学语言到底在学什么呢? 程序设计语言本身也是一个软件,它也包含模型、接口和实现。...Java的路其实也很坎坷,因为它早期在个人电脑上的尝试并不算成功。后来选择了企业级开发的赛道,才有机会展现自己的优势。...函数式编程兴起,让那些在函数式编程社区的探索随之兴起,比如,声明式编程、DSL、元编程等等。一些后出现的程序设计语言开始将面向对象和函数式编程二者融合起来,比如Scala。...我们也看到各种不同的编程风格在经历了最初各自独立的发展之后,开始慢慢融合。 对程序设计语言发展的了解,可以帮助我们理解一件事:一切语法都是语法糖。
推荐系统在我们的日常生活中无处不在,它们非常有用,既可以节省时间,又可以帮助我们发现与我们的兴趣相关的东西。目前,推荐系统是消费领域最常见的机器学习算法之一[1]。...例如,我在某宝上浏览了几件黑色女式羽绒服,系统根据内容过滤算法直接提取 “黑色”、“羽绒服”、“女式” 等 item 特征,在这个应用场景下,item 具体为 “物品”。...通过对物品进行多次关联性分析,发现我多次在某宝中的点击之间的关联性,从而生成推荐结果,将“女式羽绒服” 推荐到我的某宝首页中。...标准差 std 也很小,表明多次运行后能够收敛到稳定和可接受的解决方案中。 ? 表 1. 使用所有用户的平均值比较协同过滤器(CF)和联邦协同过滤器(FCF)之间的测试集性能指标。...每轮 FL 训练结束后,根据 FL 中央服务器发布的新的全局梯度,以 FedAvg 方式更新用户和 item 子模型。
我于2000年创建“费城地区Java用户群”并领导其15年后,决定辞去职位,将领导职务传递下去。是时候交接了。...会员 话题推荐人和领路人 ——大约有十来个会员经常给我推荐当时我还不熟悉的话题,这些话题往往几年后就变得非常热门。我有时非常依赖这群人提供话题,有些话题都超过了Java用户群的范围。...我们是在2012年请到Johnson、King、Fleury以及ESR(他并不只有Java)的。那是他们的产品最出名的时候。当时会场座无虚席,与会人数远超预定人数。...演讲者也从中受益——我们一些本地演讲者给我们分享趣闻,说曾通过Java用户群讲座找到新的雇主或客户。尽管我们禁止在会场进行招聘或者市场销售,大部分演讲者还是很容易就能联系上。...他们的套路类似,首先定义问题、解决问题,最后用这句话结束:“我的展示到此结束。大家可以走,也可以留下来,花15分钟听我介绍我们的产品是如何解决这个问题的”。这样通常能将讨论延续到会后,并可以趁机销售。
由上图我们可以看出,Thread类实现了Runnable接口,而Runnable在JDK 1.8中被@FunctionalInterface注解标记为函数式接口,Runnable接口在JDK 1.8中的源代码如下所示...Thread类的源码剖析 Thread类定义 Thread在java.lang包下,Thread类的定义如下所示。...public class Thread implements Runnable { 加载本地资源 打开Thread类后,首先,我们会看到在Thread类的最开始部分,定义了一个静态本地方法registerNatives...TIME_WAITING:超时等待状态。可以在一定的时间自行返回。 TERMINATED:终止状态,当前线程执行完毕。 Thread类的构造方法 Thread类中的所有构造方法如下所示。...join()方法 join()方法会一直等待线程超时或者终止,代码如下所示。
写在开头 面试官:“小伙子,线程池使用过吗,来聊一聊它吧!” 我:“好的,然后巴拉巴拉一顿输出之前看过的build哥线程池十八问...”...面试官满意的点了点头,紧接着问道:“那你知道如何优雅的关闭线程池吗?” 我:“知道知道,直接调用shutdownNow()方法就好了呀!” 面试官脸色一变,微怒道:“粗鲁!你给我滚出去!!!”...在JDK 1.8 Java 并发工具包中 java.util.concurrent.ExecutorService 提供了 shutdown()、shutdownNow()这两种接口方法去关闭线程池,我们分别看一下...shutdown方法后,再设置一个等待时间,如设置为5秒,则表示shutdown后5秒内线程池彻底终止,返回true,否则返回false; 这种方式里,我们将shutdown()结合awaitTermination...(long timeout, TimeUnit unit)方法去使用,注意在调用 awaitTermination() 方法时,应该设置合理的超时时间,以避免程序长时间阻塞而导致性能问题,而且由于这个方法在超时后也会抛出异常
大家好,我是冰河~~ 在【精通高并发系列】中的《高并发之——线程与多线程》一文中,我们简单介绍了线程的生命周期和线程的几个重要状态,并以代码的形式实现了线程是如何进入各个状态的。...通用的线程生命周期 通用的线程生命周期总体上可以分为五个状态:初始状态、可运行状态、运行状态、休眠状态和终止状态。 我们可以简单的使用下图来表示这五种状态。...Java中的线程生命周期 Java中的线程生命周期总共可以分为六种状态:初始化状态(NEW)、可运行/运行状态(RUNNABLE)、阻塞状态(BLOCKED)、无时限等待状态(WAITING)、有时限等待状态...这里,需要大家注意:线程调用阻塞API时,在操作系统层面,线程会转换到休眠状态。但是在JVM中,Java线程的状态不会发生变化,也就是说,Java线程的状态仍然是RUNNABLE状态。...(); RUNNABLE到TERMINATED状态 线程执行完run()方法后,或者执行run()方法的时候抛出异常,都会终止,此时为TERMINATED状态。
Java中的线程 Java是一门多线程编程语言,它内置了多线程支持的类库和API,使得开发人员可以轻松地创建和管理线程。在Java中,线程是通过java.lang.Thread类来表示的。...终止状态(Terminated): 线程执行完任务或发生异常后,线程处于终止状态,不再执行。 在接下来的部分,我们将深入探讨线程的创建与启动。...超时等待状态(Timed Waiting): 当线程等待某个条件的时候,可以设置一个超时时间,超过这个时间后线程会进入超时等待状态。...终止状态(Terminated): 线程执行完任务或发生异常后,线程处于终止状态,不再执行。 了解线程的生命周期对于编写多线程程序非常重要,因为我们需要根据线程的状态来进行合适的操作和控制。...超时等待(Timed Waiting) -> 终止(Terminated): 当线程等待的条件不再满足,或者等待超时,线程将从超时等待状态转换为终止状态。
本文的主要围绕着下面这个问题展开的,在阅读之前可以先自己思考一下问题的答案是什么?一般操作系统的线程状态都有哪些?Java中的线程周期状态的生命周期状态都有哪些?Java中线程状态是如何转化的?...终止状态线程执行完毕或者出现错误进入终止状态Java中的线程周期状态参考JDK18中java.lang.Thread.State,Java线程的状态可以划分一下几种:NEW,RUNNABLE,BLOCKED...一个线程在系统层面上可能是等待运行,也可能是正在运行。但是这些状态对JVM来讲,都可以看做可运行状态。...BLOCKED(阻塞)该状态只与synchronized锁相关,WAITING,TIMED_WAITING状态下唤醒后因为需要竞争锁也会进入该状态Java中的BLOCKED状态与操作系统中的阻塞状态不同...时间到了可以自动唤醒TERMINATED(终止)线程已经终止,可能是正常终止,也可能是异常终止,一般可以终止的操作如下所示:run()方法执行结束线程执行抛出异常终止对线程的实例调用stop()方法,现在该方法已经被废弃了
经过半年的运营,小号在完全零推广的情况下累计了 1.3W 铁粉。为什么突然又更新技术原创文章了?主要是因为写代码才是我的主业,公众号只是个人兴趣。...在 Java 中线程的生命周期中一共有 6 种状态: New(新创建) Runnable(可运行) Blocked(被阻塞) Waiting(等待) Timed Waiting(计时等待) Terminated...然而,Java 中还有很多锁,比如:ReentrantLock。线程在获取这种锁时,没有抢到就会进入 Waiting 状态,因为它本质上是调用了 LockSupport.park () 方法。...而唤醒它的线程执行完毕释放锁后,它能抢到锁就从 Blocked 进入 Runnable 状态。...Timed Waiting(计时等待) 这种状态与 Waiting 状态的区别在于:有没有时间限制,Timed Waiting 会等待超时,由系统自动唤醒,或者在超时前被唤醒信号唤醒。
因此,在这里我结合最权威的Java源代码,尝试对Java线程状态进行一个详细的解读。 二....一个新创建好的线程,调用其start()方法后,就会由NEW状态迁移到RUNNABLE状态。...在调用以下方法后,线程会进入WAITING状态: Object中定义的无超时的wait()方法,等待一个同步监视器的唤醒; Thread中定义的无超时的join()方法,等待其他线程执行完毕; LockSupport.park...在调用以下方法后,线程会进入TIMED_WAITING状态: Thread.sleep()方法,线程定时休眠; Object中定义的带超时的wait()方法; Thread中定义的带超时的join()...TIMED_WAITING:终止状态,包括线程正常执行完毕和异常终止。 三.
线程池使用 在JDK中rt.jar包下JUC(java.util.concurrent)创建线程池有两种方式:ThreadPoolExecutor 和 Executors,其中 Executors又可以创建...线程池关闭,可以使用 shutdown() 或 shutdownNow() 方法,它们的区别是: shutdown():不会立即终止线程池,而是要等所有任务队列中的任务都执行完后才会终止。...可以使用稍大的线程池,一般为2*CPU核心数。IO密集型任务CPU使用率并不高,因此可以让CPU在等待IO的时候有其他线程去处理别的任务,充分利用CPU时间。...不用阻塞队列也是可以的,不过实现起来比较麻烦而已,有好用的为啥不用呢? 面试题9:了解线程池状态吗? 通过获取线程池状态,可以判断线程池是否是运行状态、可否添加新的任务以及优雅地关闭线程池等。 ?...TERMINATED:线程池终止状态。 面试题10:知道线程池中线程复用原理吗?
一、Mybatis执行插入语句后可以返回主键ID吗? 在想写什么内容的时候,正好看到一个基础面试题上有这个问题,就把它记录下来了。 面试官:你说Mybatis执行插入语句后可以返回主键ID吗??...我:当然是可以的,连JDBC都能做到的事情,Mybatis也能做到的。...最后在实体类中,要有主键的get与set方法,满足后,在impl层controller层,直接实体类.getId() 即可获取本次插入后的主键ID,返回前端即可。...二、Mybatis-Plus在执行插入语句后返回自定义ID 面试官:那你会用Mybatis-Plus吗?Mybatis-Plus如何做这件事情啊,有简单的方式吗? ...你好,我是博主宁在春:主页 希望本篇文章能让你感到有所收获!!! 祝 我们:待别日相见时,都已有所成。
查看Thread源码,能够看到java的线程有六种状态: public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING...RUNNABLE(可运行) 线程在java虚拟机中运行的状态,可能正在运行自己代码,也可能没有,这取决于操作系统处理器。...进入这个状态后是不能自动唤醒的,必须等待另一个线程调用notify或者notifyAll方法才能够唤醒。...带有超时参数的常用方法有Thread.sleep 、Object.wait。 TERMINATED(被终止) 因为run方法正常退出而死亡,或者因为没有捕获的异常终止了run方法而死亡。...以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!
操作系统中有状态以及状态的切换,Java线程中照样也有。 State 在Thread类中有内部类 枚举State,用于抽象描述Java线程的状态,共有6种不同的状态 ?...TERMINATED 当一个线程终止后,就进入状态TERMINATED TERMINATED作为线程的终点,一旦进入TERMINATED状态,将不再能够转换为其他状态 下面的示例中,创建了一个线程...RUNNABLE RUNNABLE用于表示可运行状态 下面的代码在主线程中运行,运行过程中是RUNNABLE状态 ?...所以RUNNABLE状态可以细分为两种状态:准备妥当(READY)与RUNNING(正在运行) ? 但是,为什么没有将RUNNABLE细分?...,从汉语的角度理解类似“你等我两分钟和你等一会”的区别 等两分钟有时间,等一会儿不确定到底等待多大一会儿 再回到Java线程中,可以认为: 如果一个线程在等待获取进入同步区域的监视器锁,那么是BLOCKED
通用的线程生命周期 通用的线程生命周期总体上可以分为五个状态:初始状态、可运行状态、运行状态、休眠状态和终止状态。 我们可以简单的使用下图来表示这五种状态。 ?...Java中的线程生命周期 Java中的线程生命周期总共可以分为六种状态:初始化状态(NEW)、可运行/运行状态(RUNNABLE)、阻塞状态(BLOCKED)、无时限等待状态(WAITING)、有时限等待状态...这里,需要大家注意:线程调用阻塞API时,在操作系统层面,线程会转换到休眠状态。但是在JVM中,Java线程的状态不会发生变化,也就是说,Java线程的状态仍然是RUNNABLE状态。...我们平时所说的Java在调用阻塞API时,线程会阻塞,指的是操作系统线程的状态,并不是Java线程的状态。...(); RUNNABLE到TERMINATED状态 线程执行完run()方法后,或者执行run()方法的时候抛出异常,都会终止,此时为TERMINATED状态。
问: 假设我有这个脚本: export.bash #!.../usr/bin/env bash export VAR="HELLO, VAR" 当我执行脚本并尝试访问 $VAR 时,我没有得到任何值!...echo $VAR 有没有一种方法可以通过只执行 export.bash 而不 source 它获取 $VAR? 答: 不可以。 但是有几种可能的解决办法。...在调用 shell 的上下文中执行脚本: $ cat set-vars1.sh export FOO=BAR $ . set-vars1.sh $ echo $FOO BAR 另一种方法是在脚本中打印设置环境变量的命令.../set-vars2.sh)" $ echo "$FOO" BAR 在终端上执行 help export 可以查看 Bash 内置命令 export 的帮助文档: # help export export
哦哦,那多线程和多进程有什么区别吗?...然后线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。 ? ? 大菜鸟 ? 小菜鸟 ? 那他们都各有什么优缺点。 这个的话我给你找了一张图,可以清晰的了解它们之间的优缺点 ? (源网络。...但是线程的话在Java中怎么去使用线程呢呢。 在Java中使用线程之前首先你要先了解线程的状态。 ? ? 大菜鸟 上面就说到。线程和进程一样有五个状态分别是创建、就绪、运行、阻塞、终止。...2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。...当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
可能有小伙伴们没用过这个工具,简单介绍一下这个性能监测工具JMC,JMC是源自JRockit JVM的一套监控和管理工具,Oracle在发布JAVA 7u4(Java 7 Update 40)时将其包含在...无时限等待) TIMED_WAITING(有时限等待) TERMINATED(终止状态) Java将操作系统层面的阻塞状态细分为BLOCK,WAITING,TIMED_WAITING三种状态 NEW:新建状态...,而Callable可以获取返回值 Runnable无法抛出异常,而Callable可以抛出异常 RUNNABLE(就绪状态):调用start之后运行之前的状态RUNNING(运行状态):线程正在运行BLOCKED...Object.wait()和Thread.join()后,那基本就确定了是调用了java.util.concurrent包下面的工具类导致的线程阻塞,因为java.util.concurrent包下的工具类频繁使用了...一问,果然和我想的一样,没有设置 设置完后,他在本地跑了一下,刚开始还正常运行,后来就直接抛出异常了 SocketTimeoutException: connect timed out(连接服务端超时)
在操作系统层面,线程也有 【生命周期】,这是并发编程的基础我们需要掌握其中生命周期中各个节点的状态转换机制以及持有锁状态。文本将会介绍系统的周期以及在 Java编程语言的生命周期区别。...通用的生命周期 可以用如下图所示的 “五态模式” 来描述,分别为:初始状态、可运行状态、运行状态、休眠状态、终止状态。 ?...Java 中的线程生命周期 接下来我们着重看看 Java 中的生命周期,一共有 6 种状态,分别是: 新建 (New) :当程序使用 new 关键字创建了一个线程后。...4.从运行中到终止状态 线程执行完run()方法后,会自动转换到 终止状态,但是当运行 run()方法异常的时候,也会导致线程终止,有时候我们需要中断 run()方法的执行,比如有的人占着茅坑很久不拉屎...你可以通过 jstack 命令或者Java VisualVM。 随手点赞与转发,是前进的动力。
Java 线程状态变迁 从上图可以看到:线程创建后,处于 NEW(新建) 状态,调用 start() 方法后开始运行,线程这时候处于 READY(可运行) 状态;可运行状态的线程获得了 CPU 时间片(...操作系统隐藏了 Java 虚拟机(JVM)中的 RUNNABLE 和 RUNNING 状态,它只能看到 RUNNABLE 状态(图源:[HowToDoInJava]),所以 Java 系统一般将这两个状态统称为...(超时等待) 状态,相当于在等待状态的基础上增加了超时限制,比如通过 sleep(long millis)方法或 wait(long millis)方法,可以将 Java 线程置于 TIMED WAITING...当超时时间到达后, Java 线程将会返回到 RUNNABLE 状态;线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到 BLOCKED(阻塞) 状态;线程在执行完 Runnable 的 run...() 方法之后,最终将会进入到 TERMINATED(终止) 状态。
领取专属 10元无门槛券
手把手带您无忧上云