ITeedu.com
快捷导航
编程语言
WEB开发
手机开发
数据库
操作系统
嵌入式
开源软件
作品
编辑语言
汇编
C/C++
JAVA
Python
Ruby
WEB开发
javascript
J2EE
PHP
Django
关于
ITEEDU
首页
编程语言
汇编
C&C++
JAVA
Python
JAVA笔记主页
JAVA线程安全首页
JAVA同步基础
JAVA同步之线程状态
JAVA同步之守护线程和JOIN方法
JAVA同步之wait()和notify()的使用
JAVA同步之synchronized关键字的使用
JAVA同步设计败笔synchronized
JAVA同步之线程缓存与volatile关键字
JAVA同步之Atomic类的使用
JAVA同步之ThreadLocal的使用
JAVA同步之ThreadLocal使用示例
JAVA同步锁
JAVA同步之ReentrantLock 类简介
JAVA同步之ReentrantLock多条件的使用
JAVA同步之ReentrantLock可中断锁的使用
JAVA同步之ReentrantReadWriteLock
线程安全容器
JAVA同步之线程安全队列Queue
JAVA同步之ArrayBlockingQueue
JAVA同步之LinkedBlockingQueue
LinkedBlockingQueue生产消费模型简单实现
JAVA同步之ConcurrentLinkedQueue
线程池
JAVA同步之线程池简介
JAVA线程池submit和Future的使用
其它
JAVA实现生产者/消费者问题的多种方式
JAVA同步之守护线程和JOIN方法
守护线程 -------- 守护线程是辅助线程,比如A线程中启动了线程B,并把B设置成守护,则A为主线程,如果主线程结束,守护它的线程不论做什么都会结束。 public class DaemonSample { public static void main(String[] args) throws Exception{ DaemonThread t = new DaemonThread(); t.setDaemon(true);//this is set t thread as a daemon thread. t.start(); Thread.sleep(2000); System.out.println("main thread exit."); } } class DaemonThread extends Thread { @Override public void run() { for(int i = 0; i < 10; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("i=" + i); } } } 这个例子的结果是main主线程睡两秒之后说再见,而子线程则是在这两秒内计计数然后跟着一起说再见。当然它很不情愿,因为它想计10秒,但是没机会。把t.setDaemonThread(true)注释掉你会看到主线程说再见了,但是子线程快快乐乐的计完数说再见。这就是守护线程的作用,一切以非守护线程为主! join方法 -------- 在简单的多线程编程中,常常使用join方法来控制线程的执行顺序,也仅仅是一小部分的作用。它的内部实现是wait(0)直至被调用线程执行完毕,调用线程才被唤醒。 public class JoinSample { public static void main(String[] args) throws Exception{ Thread t = new Thread(new SubThread()); t.start(); t.join(); System.out.println("The end of main thread..."); } } class SubThread implements Runnable { public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("The end of sub thread..."); } } 在这个例子中,被调用join()的线程是t,而调用线程则是main所以会先打印下面的那句再打印上面的,即使t要先睡两秒,main也得等着。把t.join()注释掉,main就可以扬眉吐气了。