美文网首页
Java并发编程,关于那些线程相关的知识的碎碎念.

Java并发编程,关于那些线程相关的知识的碎碎念.

作者: 世说烟雨亦话悲凉 | 来源:发表于2018-10-13 22:22 被阅读0次

    本文编辑于 2018/10/13 不可能侵权,所以不删

    ReStartLin


    Java后端的开发,肯定会用到线程的知识,因为作为服务器怎么说也得处理高访问量的并发问题.

    Java的并发编程是一门进阶知识,那么相对的

    进程..线程..啥的概念得自行百度了.

    说起来,线程因为能使得程序同时执行多个任务.
    就可以实现很多场景,例如:
    多线程下载(随机IO好像会用到),,,分发任务什么的...
    所以在方便的同时也会带来安全的问题:
    问题研究的方向在于:线程安全,线程之间的通讯...
    说起来就很多东西了,所以我选择碎碎念...

    java中线程的创建

    这个知识倒挺基础的,,要么extends Thread 要么implements Runable 后者用的多是因为java可以多实现而不能多继承
    但是实际上开发是用线程池的 2333 所以前面的了解就行了

    Java中线程的类别

    有那么两种:
    用户线程: 用户线程是指用户自定义创建的线程,主线程停止时,用户线程也不会停止.
    守护线程: 这个就刚好相反了,主线程一旦停止就会跟着销毁,例如大名鼎鼎的gc线程 java中定义守护线程使用setDaemon(true)方法定义.

    java的锁呀

    锁就很厉害了,关于锁的多种实现这个以后再补充
    为什么会有锁呢,因为有些时候你在进行读写的时候,要保证数据的一致性呀什么的,防止误读幻读什么的,就需要用到锁了,加锁是解决多线程安全问题的一个最常用的方法
    java现在嘛
    有两种锁:
    内置锁: 是一种互斥锁,能保证线程的原子性,就我们经常看见的那个synchronized修饰符,这个修饰符吧,就很厉害,它既能保证线程的原子性也能保证线程的可见性,毕竟是加锁...没锁就不能进行被锁起来的代码的运行. 但是相对的,因为有锁,每个线程进来就得读锁和等待,就会造成锁的竞争,因此实现同步的代价就是降低程序的运行效率呀...
    也还有那么一种灵活的,开销不大的锁
    显示锁:java 的 Lock 包...

    说到用锁来解决多线程安全问题...

    这里不得不提一下关于Java的内存模型了(JMM)
    JMM是一个抽象的概念,自行百度:JMM决定一个线程对共享变量的写时,能够对另一个线程可见...
    这是解决多线程安全问题的最优的场景
    前面提到:synchronized既能保证线程的原子性也能保证线程的可见性.但是对内存消耗高
    其中不得不提一下:jvm为了优化性能会对变量的操作进行指令重排,如果是单线程的话,这会提高效率,但是对于共享变量呐,,,就有可能出现他值还没修改完,但是却被另一个线程给使用了

    而都用synchronized来弄的话开销又太大,因此java就想出来了一个修饰符用来告诉jvm取消对该变量的指令重排了,这就能轻量级地保证变量的可见性...
    那就常用的:volatile 厉害吧

    之前有个疑问,什么时候用volatile修饰符呢
    emmm 开发久了之后发现,凡是共享变量,加了就不亏...23333 实际上的时机请自行百度

    感谢无聊的你瞅完,对于你浪费的时间我可是不负责的2333,能云淡风轻看完这没用的文字的也就只能是因为是自己写的吧. 互勉.

    相关文章

      网友评论

          本文标题:Java并发编程,关于那些线程相关的知识的碎碎念.

          本文链接:https://www.haomeiwen.com/subject/zzsaaftx.html