摘要:
public class BreakPointDownLoad { private int bufferSize = 32; public void URLLoad(String sourceUrl, String fileName) { InputStream input = null; RandomAccessFile access = null; try { // 获取资源 URL url = new URL(sourceUrl); input = url.openStream(); // 初始化存储文件 File file = new File(fileNam... 阅读全文
摘要:
public class DownLoad { private int threadSize = 3; public void URLLoad(String source, String fileName) { RandomAccessFile access = null; try { // 打开连接,获取内容长度,计算每个线程下载长度 URL url = new URL(source); int sourceSize = url.openConnection().getContentLength(); int threadLoadSize = sourceSize / t... 阅读全文
摘要:
java与C,c++有很大的不同就是java语言开发者不需要关注内存信息,不会显式的直接操作内存,而是通过jvm虚拟机来实现。java虚拟机运行的时候内存分配图如下图:jvm虚拟机栈:一个是线程独有的,每次启动一个线程,就创建一个jvm虚拟机栈,线程退出的时候就销毁。这里面主要保存线程本地变量名和局部变量值。本地方法栈: 调用本地jni方法的时候而创建的。这里分配的jvm之外的内存空间。方法调用结束之后销毁。pc寄存器 : 这个保存线程当前执行的字节码指令堆:主要保存创建的对象。方法区:保存class相关的信息。主要是class的一个内存结构信息常量池:方法区的一部分,主要保存class内存结 阅读全文
摘要:
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。synchronized同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synchronized 和 块语句,在多线程访问的时候,同一时刻只能有一个线程能够用synchronized 修饰的方法 或者 代码块。volatile用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值。vola 阅读全文