文档章节

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

SimonAt
 SimonAt
发布于 07/13 10:50
字数 274
阅读 4
收藏 0
点赞 0
评论 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
粉丝 4
博文 51
码字总数 9961
作品 0
苏州
程序员
电子书合集

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

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

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

csdnsevenn
01/03
0
0
一起学Python:线程-注意点

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

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

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

牛客网
2017/12/21
0
0
【目录】Linux 环境C/C++ 开发笔记,持续更新

C++ 知识要点: 计算机经典书籍 收藏,不断更新..... http://990487026.blog.51cto.com/10133282/1876827 【平台搭建】 编程语言排行榜: http://www.tiobe.com/tiobe_index?page=index QT w...

990487026
2016/05/18
0
0
酷! 给python脚本配一个动画界面

python黑乎乎的命令行输出太乏味了。本篇用pyui4win开发一个有动画界面的python执行程序。 当用户选择执行时,动画开启,开始转圈,直到python功能函数执行完成。在执行过程中,界面上的信息...

编码的风景
2013/08/26
0
0
Java的21个技术点和知识点归纳

  1. JVM相关(包括了各个版本的特性)   对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经验的资深开发...

光影之间的lyy
2016/05/27
170
0
给Java新手的一些建议——Java知识点归纳(Java基础部分)

  写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,...

Java工程师-10
2017/05/24
450
2
Java多线程学习(二)synchronized关键字(2)

系列文章传送门: Java多线程学习(一)Java多线程入门 Java多线程学习(二)synchronized关键字(1) java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Ja...

一只蜗牛呀
04/16
0
0
fir.im Weekly - 揭秘 iOS 面向协议编程

本期 fir.im Weekly 重点推荐关于 iOS 面向协议编程相关文章,还有 iOS 多线程安全、Swift 进阶、Android MVVM 应用框架、Android 蓝牙实践等技术文章分享和工具源码分享~ 『iOS / Android...

风起云飞fir_im
2016/12/05
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
3
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
1
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
1
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部