美文网首页
java 多线程编程

java 多线程编程

作者: sxqiong | 来源:发表于2018-01-26 14:11 被阅读12次
    1. 进程与多线程的:
    • 进程即一个正在运行的应用,一个进程可以有多个线程但必有一个主进程。
    • 线程是进程中独立运行的子任务。
    1. Thread类
    • sleep 方法,休眠,不释放资源 --进入阻塞状态
    • yield 放弃当前cpu资源 --切换就绪状态
    • join 等待前一线程执行完毕 --进入阻塞状态
    • Object.wait 则释放资源
    • interrupt 中断
    • Thread.interrupted 判断当前线程是否已经中断
    • new Thread.isInterrupted 该判断线程是否已经中断
    • stop暴力停止,Deprecated方法
    • suspend与resume方法暂停线程,Deprecated方法
    • setPriority 设置优先级,但优先级并不代表一定优先执行。
    1. volatile
    • 确保了数据存取的原子性(32位环境读取64位变量分两次,先读高32位后读低32位)
    • 保证了数据的可见性
    • 禁止了指令重排序
      误区:
      • 自增操作(i++) 不具备原子性,即本操作是三步
        • 从主存储中读取i的值到高速缓存
        • 在高速缓存中对i进行算数运算
        • 将结果从高速缓存写入主存储
      • 不具有原子性的操作volatile无法保证其准确性
      • 当a线程读取i并进行加法运算,此时b线程进行读取i操作,此时a并未将i写入主存储,所以b读到的还是旧的值。
    • 想保证上一操作的原子性则需要在运算方法上加入synchronized关键字,或者使用Lock 对象锁的方式来保证同一时间仅有一个线程可以调用该方法。或是使用原子对象自增AtomicInteger.
    1. 守护线程Daemon:当进程中没有非守护县城则守护线程也被摧毁。典型应用就是GC。

    相关文章

      网友评论

          本文标题:java 多线程编程

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