最近在讨论一个下载任务:要求文件下载后进行打包,再提供给用户下载: 如何确保打包的线程在所有下载文件的线程执行完成后进行呢? 看看下面三个兄弟的本事: CountDownLatch.CyclicBarrier和 Semaphore 一.CountDownLatch用法 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能.比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了…
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt125 毫无疑问 Runnable会进行异步执行,此处不多说,主要说明Callable的使用,看实例: 1. 1 2 3 4 5 6 7 8 9 10 11 public class ThreadTest {     public static void main(String[] args) throws InterruptedException, ExecutionExc…
先来观察下面的代码 package trr; class Root { static{ System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参数的构造器"); } } class Mid extends Root { static{ System.out.print…
java中的线程:java中,每个线程都有一个调用栈存放在线程栈之中,一个java应用总是从main()函数开始运行,被称为主线程.一旦创建一个新的线程,就会产生一个线程栈.线程总体分为:用户线程和守护线程,当所有用户线程执行完毕的时候,JVM自动关闭.但是守候线程却不独立于JVM,守候线程一般是由操作系统或者用户自己创建的. 线程的生命周期:当一个线程被创建之后,进入新建状态,JVM则给他分配内存空间,并进行初始化操作.当线程对象调用了start()方法,该线程就处于就绪状态(可执行状态),J…
一,简单描述: 当出现程序无法控制的外部环境问题(用户提供的文件不存在,文件内容损坏,网络不可用...)时,JAVA就会用异常对象来描述. 二,JAVA中用2种方法处理异常: 1.在发生异常的地方直接处理: 2.将异常抛给调用者,让调用者处理. 三,JAVA异常可分为3种: (1)检查性异常:java.lang.Exception (2)运行期异常:java.lang.RuntimeException (3)错误:java.lang.Error 顶层是java.lang.Throwable类,检…
如果是在tomcat里运行,lib目录下一大堆的JAR包,不同的JAR包里可能会有相同的包名类名,JRE按照JAR名字的字母顺序加载JAR文件,同名类如果已加载,则后面的同名类会忽略. 公司购买的一款Java web 应用程序 ,当然是有授权码的,虽然买的全部授权,没有年限限制,但是是按年授权,包括测试环境也是一样,挺麻烦的,反编译看了下代码,找到了Licence验证机制,由于采用的是RSA加密算法,验证是是用私钥生成的签名和公钥验证,这个私钥是不可能知道的,因此即使知道了License文件的生…
/* 代码块:在Java中,使用{}括起来的代码被称为代码块. 根据其位置和声明的不同,可以分为 局部代码块:局部位置,用于限定变量的生命周期. 构造代码块:在类中的成员位置,用{}括起来的代码.每次调用构造方法执行前,都会先执行构造代码块. 作用:可以把多个构造方法中的共同代码放到一起,对对象进行初始化. 静态代码块:在类中的成员位置,用{}括起来的代码,只不过它用static修饰了. 作用:一般是对类进行初始化. 静态代码块,构造代码块,构造方法的执行顺序? 首先执行静态代码块 接着执行构造…
一:静态代码块 注意是代码块,不是静态函数.函数要调用才执行,代码块加载就执行,一般是静态变量的声明与初始化.被static修饰的代码块(赋值.输出操作等).类中静态语句块仅在类加载时被执行一次 如 static int a=1: static { int b=2; System.out.print(b);} 二:构造代码块 构造代码块是指不在类的任何一个方法中的代码.一般为全局变量的声明与初始化.顺序执行的输出语句等等.如果没有static修饰的话,这些代码按照编码时顺序执行. Java会把构…
java异常处理之try_catch_finally 看下面的一个列子: public class TestException { int goabl=1; public TestException() { } int testEx() throws Exception { int ret = 1; try { ret++; return ret; } catch (Exception e) { ret++; return ret; } finally { ret=0; } } int test…
程序中成员变量赋值的执行顺序…
一.程序设计 1.抽象公共类PublicThread,具有先前线程属性previousThread.父类为Thread 2.在PublicThread的run()方法中判断previousThread属性是否为null,如果不为null,执行previousThread的join()方法 3.定义PublicThread的构造方法:1个空参 1个以previousThread为构造参数 3.创建测试类ThreadOrder,创建三个PublicThread对象,进行测试 二.代码实现 Publi…
单例对象(Singleton)是一种常用的设计模式.在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在.正是由于这个特 点,单例对象通常作为程序中的存放配置信息的载体,因为它能保证其他对象读到一致的信息.例如在某个服务器程序中,该服务器的配置信息可能存放在数据库或 文件中,这些配置数据由某个单例对象统一读取,服务进程中的其他对象如果要获取这些配置信息,只需访问该单例对象即可.这种方式极大地简化了在复杂环境 下,尤其是多线程环境下的配置管理,但是随着应用场景的不同,也可能带来一…
一,类介绍 这是java.util.concurrent包里的一个同步辅助类,它有两个主要的常用方法  countDown()方法以及await()方法.在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 这个类可以帮助我们做什么事呢? 二,实例运行 列举一个场景,三个人赛跑,哨声一响同时出发,跑到一半时A选手突然觉得拿名次没什么意思,当最后一名也挺好,然后他就让B,C先跑到终点,然后自己再跑. 这里我们可以开三个线程模拟三位选手,看看我们怎么通过这两个重要方法来实现A选手的…
锁和synchronized关键字     为了同步多线程,Java语言使用监视器(monitors),一种高级的机制来限定某一 时刻只有一个线程执行一段受监视器保护的代码.监视器的行为是通过锁来实现的,每一个对象都有一个锁.    每个线程都有一个工作内存,在里面存放从所有线程共享的主内存里拷贝来的变量.为了访问一个共享的变量,一个线程通常先要获得一个锁并刷新它的工作内存,这将共享的值从主内存被拷贝到工作内存.当线程解锁时将会把工作内存里的值写回主内存.&n bsp;   一个线程能多次获得对…
/* * 关于线程下共享相同的内存单元(包括代码与数据) * ,并利用这些共享单元来实现数据交换,实时通信与必要的同步操作. * 对于Thread(Runnable target)构造方法创建的线程,轮到它来享用CPU资源时. * 目标对象就会自动调用接口中的run()方法 * */ /* ----------------举例子------------------- */ /* * 使用Thread类创建两个模拟猫和狗的线程,猫和狗共享房屋中的一桶水,即房屋是线程的目标对象 * ,房屋中的一桶水…
场景描述: 1,目前我们的系统可以简单归纳成MVC的架构模式 2,每个前端的请求过来,都会在C层开启事务,最后处理结束后,也在在C层关闭事务(实际是在C层的底层统一做了事务的开启和提交):        问题描述:        有一个接口方法,用于获取数据库中的序列号,然后+1再保存到数据库. 客户的报障是:并发情况下出现了单号重复,也就是多个线程同时取到了相同的序列号,而不是等到上一个线程将序列号+1后的值. 问题分析:        初步分析,存在两个问题: 1,方法的锁不起作用 2,序列…
下面这段代码的执行结果是怎样的呢? publc int test(){ int x; try{ x = 1; return x; }catch(Exception e){ x = 2; return x; }finally{ x = 3; } } 相信对Java比较熟悉的朋友马上会说出正确答案:正常返回1,异常返回2.我第一次看到这段代码时,对于finally里面的x=3产生了疑惑,不确定最后返回的x是否变成了3,直到从<深入理解Java虚拟机>里面找到了这段代码的字节码,才明白其运行机制.下…
1.父类静态代码块 (  java虚拟机加载类时,就会执行该块代码,故只执行一次) 2 .子类静态代码块 (  java虚拟机加载类时,就会执行该块代码,故只执行一次) 3. 父类属性对象初始化 4.父类普通代码块(每次new,每次执行 ) 5. 父类构造函数(每次new,每次执行) 6.子 类 属性对象初始化 7.子类普通代码块(每次new,每次执行 ) 8.子 类构造函数(每次new,每次执行)…
在Java中,如果一个类没有任何显式创建的构造器则该类默认会有一个无参构造器:如果显式创建了有参构造器则该类就不再有默认无参构造器. 在Java继承中,构造器并不能被继承,而是被显示或隐式调用. 1.子类的构造方法中必须调用其基类的构造方法(显示或隐式) 1.1.若是显示调用,则可以通过 super(argument_list) 来调用,且super调用必须在首行以保证子类对象从所有直接或间接父类中继承的实例变量都被正确地初始化(this关键字可以调用本类中的其他构造器,也必须在首句,因此thi…
1.子类 public class TestClassLife extends TestClassLifeSuper { public TestClassLife() { System.out.println("3.构造行数被访问"); } { System.out.println("2.初始化块被访问"); } static { System.out.println("1.静态初始化块被访问"); } public void Go() { Sy…
我们设置三个对象分别同时抢20张票,利用多线程实现. public class Web123506 implements Runnable{ private int ticteksNums=20;//票数 @Override public void run() { while (true){ if(ticteksNums<0){ break; } /* try { //睡眠 Thread.sleep(200); } catch (InterruptedException e) { e.print…
两个线程,一个打印1-100的奇数,一个打印1-100的偶数:要求:线程1打印5个之后,线程2开始打印,线程2打印5个之后,线程1再开始打印,以此循环. Code: package com.qhong; public class Main { /* * 两个线程,一个打印1-100的奇数,一个打印1-100的偶数:要求:线程1打印5个之后,线程2开始打印,线程2打印5个之后,线程1再开始打印,以此循环. */ private static int state = 1; private stati…
父类的静态代码块(static) 子类的静态代码块(static) 父类的非静态代码块(父类成员初始化) 父类的构造方法 子类的非静态代码块(子类成员初始化) 子类的构造方法…
java中初始化块的执行顺序在构造器之前,多个初始化块之间定义在前的先执行.如下: public class InitialBlockTest { // The first one { System.out.println("The first initial block"); } // The second one { System.out.println("The second initial block"); } // The constructor publ…
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.构造方法 构造方法(或构造函数)是类的一种特殊方法,用来初始化类的一个新的对象.Java 中的每个类都有一个默认的构造方法,它必须具有和类名相同的名称,而且没有返回类型.构造方法的默认返回类型就是对象类型本身,并且构造方法不能被 static.final.synchronized.abstract 和 native…
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.构造方法 构造方法(或构造函数)是类的一种特殊方法,用来初始化类的一个新的对象.Java 中的每个类都有一个默认的构造方法,它必须具有和类名相同的名称,而且没有返回类型.构造方法的默认返回类型就是对象类型本身,并且构造方法不能被 static.final.synchronized.abstract 和 native…
//据说这是一道阿里巴巴面试题,先以这道题为例分析下 public class Text { public static int k = 0; public static Text t1 = new Text("t1"); public static Text t2 = new Text("t2"); public static int i = print("i"); public static int n = 99; public int j…
java方法的参数的执行顺序是从左到右还是从右到左呢? 写出一下测试程序: 1 import java.util.*; 2 import java.io.*; 3 public class Test { 4 5 public static void main(String[] args) { 6 int i = 0; 7 test(++i, ++i); 8 ArrayList<Integer> list = new ArrayList<Integer>(); 9 list.add(…
一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. publicclass Foo { privateint x = 100; publicint getX() { return x;     } publicint fix(int y) {         x = x - y; return x;     } } publicclass MyRunnable i…
在总结JDBC数据库连接池的时候,发现Java多线程这块掌握得不是很好,因此回头看了下多线程的内容.做一下多线程模块的学习和总结,稳固一下多线程这块的基础.关于多线程的一些理论知识,这里不想啰嗦太多,可以进行下搜索了解. 1. 如何使用Java创建多线程 使用Java多线程,总的来说方法有两种:①继承Thread类,重写run方法  ②把相关的类实现Runnable(可运行)接口,重写run方法.③实现Callable接口(相对用得较少) package com.scl.thread; publ…