• java多线程和异步回调


        在实际开发过程中遇到的多线程情况不多,但是在生产环境中多线程是最基本的情况,java面试时也会考到,所以看看多线程的知识还是很有必要的。

      Thread,Runnable,Callable,Future,FutureTask,Executors这是java常见的接口和类。

       thread.run():线程具体要执行的代码,thread.join():等待该线程完成。

    ---------------------8/25

      写过一些程序后,在来看多线程。其实多线程涉及到内存读写,cpu等底层的东西,java语言也尽量帮我们封装和抽象,使其对于程序员能够简单些。其中java中有synchronized和volatile关键字,以及后面的Excutor框架。

      synchronized:给对象(或者代码块)加锁,使一个线程在访问时,其他线程等待,实现机制:jvm内置的锁

        volatile:在多线程中保证线程的可见性,具体机制主要是保证内存和缓存中的数据的一致性。

    问题:

    1.多个用户访问同一段代码算多线程吗? 答:不一定
    2.通常说的并发是不是针对多线程的?答:是
    3.那怎么样控制并发?答:锁

      java的并发操作中,主要在java.util.concurrent包中。

      比如常见的ScheduledExecutorService,简单来说,这是一个执行定时任务的线程,可以参考这篇博文:https://blog.csdn.net/wangmx1993328/article/details/80840598,这个类适合于在分布式系统中定时发送心跳的操作。同时还有个简单的Timer和TimerTask类:https://blog.csdn.net/wangmx1993328/article/details/80785614,都是非常好的阅读材料。其用法简单一句话总结:timer.schedule(timeTask,0,60*1000)。

      其中ConcurrentLinkedQueue的源码解读,这篇博文写的非常不错  

    -----------------8/13

       数据库连接池就使用了多线程的技术,数据库连接池基本是标配了,如c3p0,dbcp等,这已经成为比较成熟的技术,我之前也用过c3p0,现在有些忘了,我需要理解一下。应该看一下源码,能看懂一点是一点。

    new ComboPooledDataSource();//空参,自动到classpath目录下面加载“c3p0-config.xml”配置文件---配置文件的存储位置和名称必须是这样,且使用“默认配置”
    
    //ComboPooledDataSource pool = new ComboPooledDataSource("demo");//加载“c3p0-config.xml”文件中定义的“demo”这个配置元素
    

    -------8/23-------

      我发现我对java多线程的认识还存在很大的误区。比如多线程的停止和程序的停止,调用一个函数,虽然看起来没有开启一个线程,其实很可能已经开启了。

    开发框架比如Netty,大量使用异步回调ChannelFuture,自己实现异步回调比较苦难,但是JDK8提供了异步调用的类CompletableFuture,非常友好。

    -------------------------2020/7/16

      线程池技术,有哪些可选参数?

    参考资料:《java并发编程的艺术》

    参考博客:https://www.jianshu.com/p/6bac52527ca4

  • 相关阅读:
    win10自动休眠解决方法
    创世纪游戏、黄金分割比
    placeholder和assign速度对比
    内耗
    windows下编写dll
    北航院系和数字的对应关系
    maven Could not resolve dependencies
    java9模块不可见问题
    maven-dependencies插件的模拟实现
    Freemarker简单封装
  • 原文地址:https://www.cnblogs.com/Robin008/p/8971432.html
Copyright © 2020-2023  润新知