在上一篇博客JVM–解析Java内存区域及数据的内存分配与线程安全之间的一些联系中也说到了,想要理解volatile关键字,我们需要掌握Java虚拟机运行时数据区的相关知识,但是这还不够,只有理解了Java的内存模型,我们才能开始讲述volatile,而Java虚拟机运行时数据区是掌握Java内存模型的基础,所以如果你还没有看上一篇博客,请点击上方链接~~~ 引言 既然本节讲述volatile关键字,那么就先抛个砖引个玉(以下代码在64位jdk1.8下进行测试,不同jdk版本运行结果有可能不一样): public class RunThread implements Runnable { private boolean isRunning = true; public boolean isRunning() { return isRunning; } public void setRunning(boolean isRunning) { this.isRunning = isRu 继续阅读 >>


董恒毅 17/08/16 09:39:38
一直觉得自己之前写的使用定时抓取构建IP代理池实在过于简陋,并且有一部分的代码写的并不合理,刚好最近又在学习多线程,就将之前的代码进行了重构,也方便对抓取代理ip有需求的人。之前自己写的那篇文章就不删除了,里面用到了MySQL以及循环调用ip的方法(一些东西也是值得了解的。取其精华,弃其糟粕吧),大家有兴趣的可以看一下(最主要的还是不舍得访问量,哈哈)。 注:由于xici代理网的ip代理并不是很稳定,所以自己实现的ip代理池并不可用(4000个IP最后通过一系列逻辑处理和过滤之后大概只剩30多个,并且这30个ip也极不稳定),但感觉实现ip代理池的原理就是这样,在往后估计也就是性能上的优化。虽然ip代理池并不可用,但是如果你想要学习多线程以及抓取ip做爬虫的话,这篇文章我觉得是可以给你一些思路上的启发。 怎么设计一个IP代理池 其实设计一个IP代理池是非常容易的一件事情,我们来看一下其中的步骤: 1.首先肯定是从提供代理ip的网站上对ip进行抓取 2.对抓取下来的ip进行初步的过滤,比如我一开始就将IP类型不是HTTPS并且IP链接 继续阅读 >>


董恒毅 17/08/10 17:16:02
注:初学Java虚拟机,参考书籍《深入理解Java虚拟机》  最近,在学习spring框架,看书看的是云里雾里的,感觉看不下去了…..于是,就决定和其其我的他的知识换着来学,所以,就有了下面这篇博客..^-^   今天看了《深入理解Java虚拟机》的Java内存区域,决定写篇博客总结下,这块基本全是文字概念,难免有些枯燥,就权当给自己做做笔记,方便记忆…   开始我们就先来看看Java的内存 作者:dongmengyuan1020 发表于 2017/08/08 16:33:51 原文链接 https://blog.csdn.net/dongmengyuan1020/article/details/76917050 阅读:217 继续阅读 >>


董孟愿 17/08/08 16:33:51
最近一直在看《Java多线程编程核心技术》的第二章,主要讲的是线程共享变量与线程私有变量以及如何写出线程安全的代码。看这部分一开始没太注意,只是记住了一条规则,“类中的成员变量,也叫实例变量,也叫全局变量,它是非线程安全,是所有线程共享的变量,定义在方法中的私有变量是线程安全的,是每个线程私有的”。很好理解不是吗,然后一帆风顺的看到了关于volatile这部分的知识,看过之后我陷入了凌乱。。。关于这部分我之后进行总结,而现在我觉得你如果真的想写出线程安全的代码,那么Java的内存分配以及布局就是我们需要掌握的基础。为此,我粗略的看了一下《深入理解Java虚拟机》这本书的第二章,并且查阅了一些资料,现在汇总整理如下。 注:学习这部分内容之前如果你对进程的内存映像或数据在内存中的分配有大概的了解,建议你先忘记它们,因为这是讲Java虚拟机运行时的数据区,和之前的知识并不相同,所以学习的时候不要拿自己以前所了解的知识进行比较与衡量。 Java虚拟机运行时的数据区 先来看一张图片: 在这里我们只需要关注线程共享区中的堆,以及线程独占区中的虚拟机栈, 继续阅读 >>


董恒毅 17/08/08 14:26:58
前言 本篇心路历程太多,放在最后了。 正文 在云服务器(阿里云、腾讯云)上部署Zookeeper集群模式时,无法成功的原因有很多,网上主要提到了端口被占用(未开放)和防火墙开启两种问题,类似的博客很多,本文不再赘述。 如果你已经针对上述两种情况做了修改依然没有成功,那么就可能出现了本篇的问题。 Zookeeper在启动时,并不会打印信息,即使集群启动失败,依然会显示: 这样我们看不到日志信息,无法判断出现的问题,通过 # zkServer.sh start-foreground 可以看到Zookeeper启动时的信息。 每次Zookeeper启动时信息很多,一定翻到最上面要从第一条开始看。 如果有这条错误消息 2017-08-05 09:27:32,253 [myid:1] - ERROR [/xxx.xx.xxx.xxx(你的IP):3888:QuorumCnxManager$Listener@763] - Exception while listening java.net.BindException: 无法指定被请求的地址 继续阅读 >>


康艺杰 17/08/05 10:06:20
注:本系列博客参考《Java多线程编程核心技术》,主要是对书上的知识点进行总结,并记录学习过程。 一直对并发这块比较感兴趣,也到了系统学习Java多线程的时间。目前所学习的书籍是《Java多线程编程核心技术》,买回来之后听说这本书不怎么样,豆瓣评分也就7点几,目前读完了第一章,感觉确实不是很好,但是也不算太坑,总的来说还是可以入手的。好了,废话不多说,开始正题。 首先我们来看一份代码: public class CountOperate extends Thread { public CountOperate() { out.println("CountOperate---begin"); out.println("Thread.currentThread.getName()=" + Thread.currentThread().getName()); out.println("this.name()=" + this.getName()); out.println("Thr 继续阅读 >>


董恒毅 17/08/04 10:15:20
做完了第一版的图书管理系统, 决定这段时间静下心好好看一看书, 一边复习Java基础和Servlet&JSP, 再一边学一学框架, 写读书笔记将学习到的知识点记录下来. 反射是什么? 反射,一种计算机处理方式。是程序可以访问、检测和修改它本身状态或行为的一种能力。 这是百度里给出的概念, 可能大多数人跟我刚开始一样, 不是很理解这句话. 那么我们先从Java文件编译链接后生的可执行文件说起吧. 首先, 大家都明白, 一个.java文件经过编译链接会生成.class文件, 准确的来说, 应该是一个类经过编译会生成一个.class文件. 如果一个类里面除了主类还有其他类, 不管是内部类还是外部类, 每个类都会各自生成一个.class文件. 可能有人通过查看IDEA下classes目录会发现, 一个类经过编译链接后, 其内部类并不会生成独立的.class文件,但是实质上是会生成的, 只是IDEA下并没有显示出有这个.class文件而已, 我们在终端下来测试对比一下. 先来看一段Java代码: public class test { 继续阅读 >>


祝一迪 17/08/03 23:44:44
JavaBean是什么?JavaBean就是一个遵循特定写法的Java类。  它在MVC设计模型中是model(模型层), 就是用来设置数据的属性和一些行为。  JavaBean的写法:   必须实现java.io.Serializable接口   没有公开的类变量   具有无参的构造器   具有公开的设值方法(Setter)和取值方法(Getter)    JavaBean范例: 作者:dongmengyuan1020 发表于 2017/08/01 15:34:43 原文链接 https://blog.csdn.net/dongmengyuan1020/article/details/76532962 阅读:155 继续阅读 >>


董孟愿 17/08/01 15:34:43
之前在学习java时没有认真看java注解这部分,最近在熟悉项目代码时,看到里面代码中很多地方都用了java注解这些东西,关于这部分在这里做个总结。       java注解,也称元数据,一种代码级别的说明。它是JDK1.5以及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。1.java的内置注解 作者:hjh_walker 发表于 2017/07/25 21:25:36 原文链接 https://blog.csdn.net/hjh_walker/article/details/76099106 阅读:177 继续阅读 >>


胡嘉辉 17/07/25 21:25:36
A + B Problem II I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B. Input The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000. 继续阅读 >>


殷健翔 17/07/25 09:38:35