文档章节

多线程编程注意点(持续更新)

SimonAt
 SimonAt
发布于 07/13 10:50
字数 274
阅读 9
收藏 0

1. 对象逸出(Escape)

    构造函数中,当前对象还没初始化完成就暴露this给外部

package com.chstudy.unsafe;

import java.util.ArrayList;
import java.util.List;

public class EventEscape {

    private final List<Event> listOfEvents;

    public EventEscape(EventSource source) {
        source.registerListener(new EventListener() {
            @Override
            public void onEvent(Event e) {
                doSomething(e);
            }
        });
        listOfEvents = new ArrayList<>();
    }

    void doSomething(Event e) {
        listOfEvents.add(e);
    }

    interface Event {

    }

    interface EventSource {
        void registerListener(EventListener listener);

    }

    interface EventListener {
        void onEvent(Event event);
    }
}    

二、并发使用的类,对成员变量的访问需要同步

package com.chstudy.unsafe;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;


@WebServlet(urlPatterns = "/count.do")
public class UnsafeCountServlet  extends GenericServlet implements Servlet {


    private Long count = 0L;

    public Long getCount() {
        return count;
    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        count++;
        res.getWriter().write(count+"");
        res.flushBuffer();
    }

}

三、JVM 参数,打印指定方法的汇编指令

-XX:+UnlockDiagnosticVMOptions -Xcomp -XX:+PrintAssembly -XX:CompileCommand=compileonly,*GoalNotifier.setGoal

-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly:开启JIT反汇编
-Xcomp:让虚拟机以编译模式执行代码,使得JIT编译可以立即触发 -XX:CompileCommand=compileonly,*GoalNotifier.setGoal:只反汇编GoalNotifier的setGoal方法

四、

本文转载自:https://legacy.gitbook.com/book/hzy38324/java-concurrency-in-practice/details

共有 人打赏支持
SimonAt
粉丝 5
博文 57
码字总数 11295
作品 0
苏州
程序员
电子书合集

电子书合集 那天午后2013-05-2835 阅读 C++游戏编程 点此下载 高质量C++编程 点此下载 Java语言程序设计-基础篇 点此下载 Java语言程序设计-高级篇 点此下载 大话java 点此下载 计算机网络 ...

那天午后
2013/05/28
0
0
如何跳出令人窒息的职场死循环

点击上方“程序人生”,选择“置顶公众号” 第一时间关注程序猿(媛)身边的故事 你的工作和生活,是这样的吗? 上班,领导派活,编码(可能是任务 X)、测试(可能是任务 Y)、解 Bug (可能...

csdnsevenn
01/03
0
0
计算机专业必读哪些经典书籍?我都打包整理好了

最近花时间整理了一下目前主流的三大编程语言C、Java、Python学习的经典教材,从入门到进阶,各个阶段的书籍都有,如果你准备在计算机这条路上走得更远的话,建议可以看一下,后面附带免费获...

在北方玩弹子球
09/18
0
0
一起学Python:线程-注意点

线程-注意点 1. 线程执行代码的封装 通过上一小节,能够看出,通过使用threading模块能完成多任务的程序开发,为了让每个线程的封装性更完美,所以使用threading模块时,往往会定义一个新的子...

祈澈姑娘
2017/11/28
0
0
知识总结:Java的21个技术点

关于Java的编程知识,有人会问哪几个是重要的知识点,不知道大家是否知道呢?给大家分享一下! 1、JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很...

牛客网
2017/12/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

TypeScript基础入门之高级类型的可辨识联合(Discriminated Unions)

转发 TypeScript基础入门之高级类型的可辨识联合(Discriminated Unions) 高级类型 可辨识联合(Discriminated Unions) 你可以合并单例类型,联合类型,类型保护和类型别名来创建一个叫做 ...

durban
8分钟前
0
0
画图工具

目标是不要让我自己摆放,那样会打断我的思路。要自己会摆放,我写字就好。 纠结对齐的我在也不会因为一个像素的问题小心翼翼的移动鼠标了。因为它对不齐你也管不了。 Graphviz https://www...

郭大鹏
8分钟前
0
0
在Visual Studio中使用GitHub(使用篇)

上一篇中已经介绍了如何在windows下安装和配置Git,并且详细说明了如何和GitHub连接。 这里就详细的说明下如何在Visual Studio中使用GitHub。这里也是一个简单的Git教程。 注:非常非常简单的...

Jokeny
9分钟前
0
0
tomcat 在liunx系统中shutdown后进程仍然存在解决办法

这个在windows下没有碰到过,因为此前跑Tomcat都是以服务而不是命令脚本的形式跑的,而且已经换了一个项目,所以暂时不考察windows下是否存在该问题。 难道是Tomcat版本问题?或者用带内存泄...

乱舞
10分钟前
0
0
区块链10年了,还未落地,它失败了吗?

几乎每个人,甚至是对通证持怀疑态度的人,都对区块链的技术有积极的看法,因为它有可能改变世界。然而,区块链技术问世已经10年了,我们仍然没有真正的用上区块链技术。 有人说,比特币是建...

linux-tao
14分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部