对Java并发编程的思考和总结(一)

标签: java并发
3人阅读 评论(0) 收藏 举报
分类:

近日把《Java并发编程》撸了一遍,虽然还有很多还没看懂,先来个总结吧。

主要API

  • start()和run()的区别:直接调用run不会开启新线程,只当是普通方法。
  • currentThread()获取当前线程名 isLive()方法判断当前线程是否处于活动状态。
  • sleep()和notify()方法使用后都不释放锁,而wait()和join()使用后立即释放锁。

  • getId()方法的作用是取得线程的唯一标识。

  • this.interrupt()测试当前线程是否中断,执行后具有把状态标志位清除为FALSE的功能

  • this.isInterrupt()测试线程是否已经中断,不具有清除功能

  • yield()表示放弃当前CPU资源,让给其他任务去执行CPU,但释放时间不确定,有可能刚放弃,有重新获得cpu。
  • setPriority()设置线程优先级
  • 守护线程,当进程中不存在非守护线程后,当场销毁

对象及变量的并发访问

synchronized可以防止脏读现象出现,还可以实现可重入锁

public class Service {

    synchronized public void service1() {
        System.out.println("service1");
        service2();
    }

    synchronized public void service2() {
        System.out.println("service2");
        service3();
    }

    synchronized public void service3() {
        System.out.println("service3");
    }

}
  • synchronized锁定方法有一个很大的弊端,就是锁的粒度太大,造成性能的下降,所以一般同步代码块就好
public class ObjectService {

    public void serviceMethod() {
        try {
            synchronized (this) {
                System.out.println("begin time=" + System.currentTimeMillis());
                Thread.sleep(2000);
                System.out.println("end    end=" + System.currentTimeMillis());
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
  • 由于String存在常量池,一般同步代码块都不用string作为锁对象。
  • volatile保证的是可见性,并没有实现原子性。
查看评论

Java工作经验总结(一)

《Java工作经验总结(一)》主要针对有一定基础的Java学员。本系列课程主要分享自己平时真实的工作经验。涉及内容广泛,包括Java、Java Web、数据库、缓存、分布式、大并发等一系列真实工作经验。让学员脱离枯燥的理论知识,在真正的实践中成长起来。
  • 2017年10月15日 22:28

关于Java并发编程的总结和思考

编写优质的并发代码是一件难度极高的事情。Java语言从第一版本开始内置了对多线程的支持,这一点在当年是非常了不起的,但是当我们对并发编程有了更深刻的认识和更多的实践后,实现并发编程就有了更多的方案和更...
  • jackfrued
  • jackfrued
  • 2015-03-27 10:36:10
  • 101869

Java并发编程知识点总结

为什么采用多线程? 之所以采用并发,是因为程序在运行过程中可能会遇到阻塞,这时候如果是多线程可以保证程序整体还是继续向前的,如果没有阻塞,那么多线程只会增加了上下文切换的代价就没有任何意义了。 ...
  • liujianwd
  • liujianwd
  • 2017-03-22 21:40:23
  • 189

Java并发编程-并发编程知识点总结

1) 什么是线程?   线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线...
  • chenchaofuck1
  • chenchaofuck1
  • 2016-06-11 17:39:53
  • 2960

java程序员面试——Java并发编程知识点总结

1) 什么是线程?   线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一...
  • sbq63683210
  • sbq63683210
  • 2016-06-12 12:16:36
  • 908

java并发编程与高并发解决方案

第1章 课程准备(讲师参与学习讨论)本章首先从课程重点、特点、适合人群及学习收获几个方面对课程进行整体的介绍,然后会从一个实际的计数场景实现开始,给大家展示多线程并发时的线程不安全问题,让大家能够初体...
  • u014001412
  • u014001412
  • 2018-04-11 14:09:43
  • 26

Java并发编程(一):并发编程的挑战

Java并发编程(一): 并发编程的挑战本文主要内容出自《Java并发编程的艺术》一书,是对该书内容的归纳和理解,有兴趣的朋友请购买正版阅读全部内容。 并发编程的目的是为了让程序运行的更快,但是并不是...
  • upshi
  • upshi
  • 2016-12-05 21:50:35
  • 1242

《JAVA并发编程实践》读书笔记(一)

《JAVA并发编程实践》读书笔记(一)2016年8月1日,“妮妲”冲击广东,全市放假1天。托“妮妲”的福,终于有空将近期的阅读整理一下。 最近利用业余时间重读了Brian Goetz的书,觉得受益匪...
  • youngweiquan
  • youngweiquan
  • 2016-08-02 01:04:55
  • 873

java并发编程总结(1)

入门示例Thread 和 Runnableimport java.util.Random;public class MyThreadWithExtends extends Thread { S...
  • tianjun2012
  • tianjun2012
  • 2017-02-08 15:45:40
  • 208

java并发编程(一)

多线程的基础知识 1.同一个进程中的所有线程都将共享进程的内存地址空间,因此这些线程都能访问相同的变量并在同一个堆上分配对象,这就需要实现一种比在进程间分享数据粒度更细的数据分享机制。 2...
  • hwshea
  • hwshea
  • 2015-11-17 15:09:43
  • 234
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 645
    排名: 7万+