`
ftj20003
  • 浏览: 132088 次
  • 性别: Icon_minigender_1
  • 来自: ...
社区版块
存档分类
最新评论

多线程基础总结二--Thread

    博客分类:
  • Java
阅读更多
      对于Thread来说只想说两个方法,一个是setDaemon(false|true),另一个是join()。首先说说守护线程,这么东西是干什么用的?对于Java应用我们都知道main方法是入口,它的运行代表着主线程开始工作了,我们也知道JVM里面有垃圾回收器的存在使得我们放心让main飞奔,然而这背后的故事是垃圾回收线程作为守护着主线程的守护线程默默的付出着。。。很像那个啥啊,呵呵。令人发指的是main这个畜生背后其实有好几个守护线程默默的付出!当然如果硬是要把守护线程比做女人,非守护线程比做男人的话,那么一个男人背后可以有多个默默付出的女人。Java在设计时就默认了这个现实社会不太能实现的现实,并且强制规定如果男人不在了,这个虚拟世界就over了,看来资本主义社会下长大的孩子创造的东西骨子里是封建社会的血脉啊!扯远了,对的,JVM内部的实现是如果运行的程序只剩下守护线程的话,程序将终止运行,直接结束。所以守护线程是作为辅助线程存在的,主要的作用是提供计数等等辅助的功能。下面写个小例子说明一下:
/**
 * User: yanxuxin
 * Date: Dec 10, 2009
 * Time: 7:16:55 PM
 */
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方法,在简单的多线程编程中,常常使用它来控制线程的执行顺序,也仅仅是一小部分的作用。它的内部实现是wait(0)直至被调用线程执行完毕,调用线程才被唤醒。还是写个小例子解释一下:
/**
 * User: yanxuxin
 * Date: Dec 11, 2009
 * Time: 6:27:04 PM
 */
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就可以扬眉吐气了。
      很多情况下我们用不到多线程,但是不幸或者幸运的是硬件的发展,在核心频率因为晶体管密度的物理原因而很难再有突破时,CPU制造商都开始从核心的数量上做文章了。从双核到4核,6核,8核,16核,48核...这么多核心带来了编程的转变,越来越多的程序需要考虑多核多线程的优势,加上技术发展的原始推动力--商业需求,共同推进了多线程编程时代。因为并发优势而被炒作为Java终结者的Scala慢慢的抬起头来,我也简单的学习了其部分内容,在多线程的编程上的确也没Java这么多的陷阱,封装的更简洁。Java始终给人的感觉是写了很多,做的很少,这种感觉程序员或许能接受,毕竟代码量上去了,但是估计烧钱的老板会疯掉。不过看到JDK7将会大量的改进java.util.concurrent包的实用性和并发性能的提高,或许掌握Java多线程的门槛会低一点。但愿不用混搭语言解决问题,虽然都是跑在JVM上的静态语言。关于java.util.concurrent包的整理,还没想好搞透彻,暂时无话可说。
5
0
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    多线程知识总结

    ### 多线程知识总结 #### 一、线程基础概念 **线程状态:** 在探讨多线程之前,我们需要了解线程的基本状态转换。一个典型的线程生命周期包括以下几个阶段: 1. **Start(启动):** 当线程被创建后调用`start()`...

    C++-多线程编程总结-实例讲解.doc

    在C++中实现多线程,我们可以利用标准库中的`&lt;thread&gt;`头文件以及相关的同步机制,如互斥锁、条件变量等。 1. **并发编程**:并发是指程序中多个执行单元同时运行。在C++中,可以创建并管理多个线程,使得程序的...

    Java多线程-Thread类的常用结构及线程优先级

    Java多线程编程是开发高并发应用的基础,其中Thread类是实现多线程的核心类。本文将详细解析Thread类的常用结构以及线程优先级。 一、Thread类的常用结构 1. 线程中的构造器 - `Thread()`:创建一个没有指定名称...

    python之多线程编程1

    在本文中,我们将介绍 Python 中的多线程编程基础知识,包括多线程编程的定义、优点、 thread 模块的使用等。 多线程编程的定义 ---------------- 多线程编程是指在一个程序中同时执行多个线程的技术。每个线程都...

    使用C#多线程应用程序 - 示例

    #### 二、C#中多线程的基础 - **命名空间**: 在C#中,要实现多线程功能,首先需要引入`System.Threading`命名空间。这个命名空间提供了各种与线程相关的类和接口,如`Thread`类、`ThreadStart`委托等。 - **基本...

    自己总结的多线程

    ### 多线程基础 #### 1. 多线程概念 多线程是指在一个程序中包含多个控制流,它们可以并发执行不同的任务。在Java中,多线程的实现通常借助于`Thread`类或实现`Runnable`接口。多线程能够提高CPU的利用率,改善应用...

    Java多线程知识点总结

    总之,掌握Java多线程的生命周期、创建、启动、同步以及线程池的使用是编写高效、稳定并发程序的基础。理解这些知识点对于解决并发编程中的问题,比如资源竞争、死锁、线程安全性等问题,至关重要。在实际开发中,...

    JAVA多线程总结

    本篇总结涵盖了Java多线程的基础概念、创建与启动、线程调度、同步与协作以及新特性。 **一、Java线程:概念与原理** 1. **线程与进程**: - **进程**:是操作系统资源分配的基本单位,每个进程都有独立的内存...

    并发服务器-多线程服务器详解

    #### 二、线程基础知识 **1. 线程的概念** 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以包含多个线程,而这些线程共享相同的内存空间。线程与进程相比有...

    IBM多线程编程基础教程

    1. **线程基础**(IBM多线程教程一-线程基础.doc): - 线程的概念:线程是操作系统分配CPU时间的基本单元,一个进程中可以有多个线程同时执行。 - 创建线程:通过实现`Runnable`接口或继承`Thread`类来创建线程...

    Java_多线程编程线程:大总结

    ### Java多线程编程大总结 #### 一、Java多线程编程的演进与重要性 Java多线程编程自Java 5之后经历了显著的革新与扩展,引入了强大的并发包,极大地增强了多线程编程的能力。在Java 5之前,多线程的支持较为薄弱...

    VC 线程基础知识总结

    ### VC 线程基础知识总结 #### 一、线程概念与重要性 在计算机科学领域,线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。程序员可以通过多线程技术,实现并发执行任务,...

    多线程学习文档

    ### 多线程学习文档知识点总结 #### 一、线程的基本概念及关系 ##### 进程(Process) - **定义**:进程是Windows系统中的一个基本概念,它包含了运行程序所需的所有资源。 - **特性**: - 相对独立性:一个进程...

    Java多线程相关知识总结

    ### Java多线程相关知识总结 #### 一、基本概念 多线程是现代编程语言中一项非常重要的特性,尤其在Java...以上就是关于Java多线程的基础知识总结,希望能帮助大家更好地理解和掌握Java多线程的相关概念和技术要点。

    java-Thread-study-summary.zip_java 多线程

    Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,...通过阅读“java多线程编程总结.pdf”,读者将全面了解Java多线程的概念、实现方式、同步机制以及如何处理并发问题,为实际项目开发打下坚实基础。

    java多线程编程总结

    #### 二、继承Thread类实现多线程 **1. 基本概念** - `Thread`类是Java中所有线程的基础类,提供了创建和管理线程的基本功能。 - 实现多线程最直接的方式之一就是继承`Thread`类并重写`run()`方法,该方法中包含了...

    多线程精品资源--️这是一条汇总网上许多资料,而不是资料的纯粹堆砌,让人眼花缭乱的复制粘贴,这不是帮你在总结所有的知.zip

    一、多线程基础知识 1. **线程定义**:线程是操作系统分配处理器时间的基本单位,一个进程可以包含一个或多个线程,每个线程都有自己独立的程序计数器、系统栈和局部变量,但共享同一块内存空间,包括全局变量和...

    JAVA-基础多线程

    ### JAVA-基础多线程 #### 一、线程概念 1. **线程定义**: - 线程是程序执行时的一条路径,是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。 - 一个线程指的是进程中一个...

    java多线程总结(一)

    Java中实现多线程主要有两种方式:继承Thread类和实现Runnable接口。 ### 继承Thread类 在Java中,通过继承`Thread`类并重写其`run()`方法可以创建自定义线程。`Thread`类是Java提供的一个基础类,用于封装线程的...

    线程及线程应用总结

    1. **线程基础** - 线程是操作系统分配CPU时间的基本单位,一个进程可以包含一个或多个线程。 - Java中通过`java.lang.Thread`类或者实现`Runnable`接口来创建线程。 - 主线程:每个Java应用程序都有一个主线程,...

Global site tag (gtag.js) - Google Analytics