如何深入Java多线程开发?

爱编程的欣欣


JAVA多线程技术太杂,随着了jdk版本的逐渐迭代,越来越多的多线程技术被提出来,原本的还没掌握又来了新的技术,但是万变不离其宗,下面来看下多线程主要涉及哪些东西?


1,何为多线程?在计算机系统中,CPU负责计算,而内存负责数据存储,线程就是操作系统用来进行运算调度的最小单位!显然,多线程就是多个调度单位!

2,为什么要使用多线程?

①,针对单核CPU,CPU在同一时间只能和一个线程进行交互,如果这个线程因为某些原因出现阻塞,那么整个计算机就处于停滞状态,为了避免这一现象,线程被设计为多线程执行模式,如果一个线程阻塞了,另外的线程可以继续使用执行计算,这样CPU使用效率就得到了极大的提升!

②,多核CPU:现在的计算机都被设计为多核的,能保证同一时间可以有多个运算单元,如果多核CPU却只使用单线程,无疑更是极大的浪费了CPU资源!

多线程的使用在很多场景中(批量处理,并行计算等)有着极高的效率,所以使用多线程无疑是很重要的!


3,JAVA中的多线程:JAVA中的线程与操作系统的线程不是一个概念虽然都有相似的几个线程状态(new,runnable,running,block,waiting,dead),JVM只是操作系统中的一个进程,JAVA的多线程只是属于jvm中的调度单元,具体关系常见如下解释:https://www.zhihu.com/question/23096638

唯一需要注意的是,JAVA中的多线程都是抢占式的,由jvm进行调度!


4,实现多线程的几种方式:①继承Thread,②实现Runnable接口,Callable接口,③使用线程池!

⑤,线程安全可使用技术:synchronize加锁,ReenTrantLock可冲入锁,ReadWriteLock读写锁,CAS原子命令(J.U.C下以Atomic打头的类基本用CAS实现)乐观锁,AQS抽象队列式同步器;

⑥,JDK中的并发容器:StringBuffer,Vector,SynchronizeMap,HashTable,concurrentHashmap(分段锁思想),ConcurrentLinkedQueue,CopyOnWriteArrayList(高效读取),ThreadLocal(一个线程,一份变量)

⑦,网络IO:BIO(同步阻塞IO),NIO(同步非阻塞),AIO(异步阻塞)

⑧,并行处理:callable+ future异步回调,forkjoin框架。



任何技术都是为业务服务的,具体用什么技术都还是需要看场景,之前分享了concurrentHashmap,CAS等,之后会有更多的多线程,JAVA方面的技术分享,敬请关注。。


哎哟JAVA不错哦


java多线程的开发属于java编程里面高级层面应用,实际中应用的场景非常多,举个简单的例子,同时下载多个文件,同时接收多条数据,多个操作同时操作一个数据块等等这方面涉及到的非常多,在开发app或者企业级应用方面都会涉及到。

简单的来说多线程编程几乎是所有编程语言里面比较难的部分了,java经常提到的线程池核心也是这部分,其实多线程就是并发问题,为了提升效率,正常的多个事情可以事先排好队列一个个的来也可以把事情做的很好,但是如果每个人都能去找前台解决问题是不是更好,所以多线程的概念就出来了,在这当初算是软件行业一个革命性的突破,现在几乎所有的编程语言都具备这种属性。多个人一起做事情,但如果共同操作一个数据块岂不是要打架,于是临界区的概念以及线程锁也就出来了。保证在操作同一个数据区域的时候遵守一个规则,一个数据在一个时间段内只能有一个人来操作。

现在推荐几本多线程和并发编程书籍

java并发编程实战

java多线程编程核心技术

基本上两本书看完对于多线程的以及并发性有一个大概的了解,然后自己写个多线程操作的例子,可以写个同时下载多个文件的例子。

多线程在网络编程里面涉及到的非常多,这块骨头啃不下就不要说对java已经很熟悉了。


大学生编程指南


对于新手来说多线程无疑最难理解的部分,平常我们练习最多的就是输出一些参数,从db中增删改查操作一些数据,这些都是单线程所做的事情,如果遇到了大数据量的处理,IO密集型的任务以及高并发的处理,这时就得用到多线程。

常用的实现方式就是继承thread,或者实现Runnable接口,还有一种带有返回值的方式,即实现callable接口来实现多线程的处理。当然线程频繁的启动和关闭是很耗资源的,于是就使用到了线程池。可以先学会使用java自带的四种线程池,然后理解线程池的原理,比如corePoolSize核心线程数,maxPoolSize最大线程数,线程拒绝策略等。

单核cpu同时只能运行一个线程,在java中的线程是随机执行的,内存中会有程序计数器记录线程执行到了哪里,由于线程的切换时间很短,肉眼看起来好像同时执行多个线程。所以单核cpu只能实现并发,而多核cpu才能使用多线程实现并行,充分利用cpu资源。

接下来多线程肯定会了解到线程安全的问题,实现线程安全的几种方式,比如synchronized,lock,volatile,final关键字,Atomic类,countdownlatch,concurrent包下的类,CAS的实现原理,TLAB(thread local buffer allocation),线程优先级运行状态,同步异步,以及由于锁竞争导致的死锁,守护线程的作用等。

欢迎大家留言讨论


java攻城狮爱好者


第一步,建议先学好操作系统这门课,深入理解进程和线程,理解线程的状态转换和调度;

第二步,学习Java中线程的操作,Java对象的多线程特性,练习使用Java代码操作线程和调度线程,线程池等高级操作;

第三步,学习并理解高手的多线程代码。


分享到:


相關文章: