java,高并发解决方案.docx
文本预览下载声明
java,高并发解决方案
篇一:Java高并发程序设计 Java 高并发程序设计 第一课前沿 ? 在计算密集型的领域中非常适用并行程序 ? 多核CPU的产生促使了并行程序的设计,摩尔定律的失效,芯片的性能不能提高,4GHz已经是当下最高的频率,从而产生多核CPU的出现。 ? 活锁 : 两个资源 A、B, 进程1和2 分别占用A和B时发现不能工作, 就同时释放掉,然后又同时分别占用B和A 如此反复!出现活锁 ? 阻塞: 第二课 Java并行程序基础 ? 线程是比进程更细粒度的执行单元, 可以说是属于进程的一个子集 ? 7, Thread 类的run()方法实现于Runnable 接口,如果直接调用run()方法,不会启动新的线程,而是在当前线程下运行, start() 方法会开启一个新的线程。 两种方式, 1 重载run方法 2,实现Ruanable接口 8, () 是一种比较的让线程终止的方法 优雅的方法 , 不会立刻停止掉该程序 , 根据程序的设计,而是根据该程序的设计,当执行完该程序的一次循环之后, 在下次循环程序开始之前中断, 保证该程序的数据完整性。 9,try { (XX); } catch (InterruptedException e) { // //设置中断状态,抛出异常后会清除中断标记位 (); } 10,查看当前被挂起的进程命令 jps 查看进程中具体线程的信息 jstack 5880 11, ? 等待线程结束 join(),其本质是判断线程是否还存活,如果一直存活那么通 知调用该线程的其他线程等待,如果结束有JVM 调用notifyAll()唤醒所 有等待该线程的线程。 f (millis == 0) { while (isAlive()) { wait(0); } } ? 12,守护线程在后台默默的完成一些系统性的服务,比如垃圾回收与JIT线程等。 但非守护线程结束时, JVM不会因为守护线程而继续执行,随之而推出。 13,线程优先级的运行时候只是在概率上发生的可能下要大! 14,synchronized 加锁的三种方式。 ? 对象实例加锁 ? 实例方法加锁 ? 类级别实例方法加锁 谦让 yield() 第三课 Java内存模型和线程安全 ? 同一个操作在两条不同的指令之间是不能够一起做的,因为他们会使用同一个硬 件设备. ? 可见性问题是各个层面优化产生的 ? ? Java并 原子性 发编程的的三个重要的概念。 可见性 有序性,并发程序会发生指令重排,导致语句执行顺序发生变化的情况,虽然处理器会对指令进行重排序,但是它会保证程序最终结果会和代码顺序执行结果相同;指令重排序不会影响单个线程的执行,但是会影响到线程并发执行的正确性。 ? 要想并发程序正确地执行,必须要保证原子性、可见性以及有序性。只要有一个没 有被保证,就有可能会导致程序运行不正确。 第四课无锁 ? 无锁的性能要远好于阻塞的执行方式 ? 前导零 是指 转换成二进制的时候 前面为零的个数(LeadingZeros) ? 无锁实现Stack堆栈,见作业 第五课 JDK并发包1 1. Reentrantlock是属于Synchronized的增强版,多增加了一些特有的功能 2. ConcurrentHashMap 属于高并发的解决方案 3. HashMap 发生大量冲突的时候,会退化成一个链表,引起性能降低 4. BlockingQueue 阻塞队列,会引起线程的阻塞,不是一个高性能的并发实现,内部实现 机制采用了加锁,同时只有一个线程进入 第六课 JDK并发包2 1, 线程池实现了对线程的复用,避免了线程的多次创建和销毁, 节省了CPU处理时间。 2, Java内置线程池,Callable 与Runnable 的区别是有无返回值 3, ForkJoinPool 说明该线程池是如何工作的 第七课设计模式 1, 采用静态内部类来实现单例模式,可以保证在StaticSingleton 类中只调用 getInstance()方法时才会初始化类,从而保证了在操作该类其他字段的时候,不会被初始化。 篇二:ActiveMQ高并发处理方案 高并发
显示全部