- 浏览: 16907 次
- 性别:
- 来自: 杭州
文章分类
最新评论
很多书上介绍Java的线程创建有两种方式,一种是继承Thread类,一种是实现Runnable接口。实际上Runnable接口只有一个run方法,Thread也是实现了Runnable接口的,但是无论哪种方式都必须借助Thread类,下面列举了创建线程的两种方式:
->方式一:继承Thread类
public class ChildThread extends Thread { /** * 覆盖run方法,编写线程执行的核心代码 */ @Override public void run() { System.out.println("线程" + Thread.currentThread().getName() + "执行了..."); } public static void main(String[] args) { //启动线程 new ChildThread().start(); } }
->方式二:实现Runnable接口,将Runnable对象作为Thread的目标对象(targetObject)
public class ThreadTargetObject implements Runnable { /** * 实现run方法,编写线程执行的核心代码 */ @Override public void run() { System.out.println("线程" + Thread.currentThread().getName() + "执行了..."); } public static void main(String[] args) { //启动线程 new Thread(new ThreadTargetObject()).start(); } }
注意:必须通过start方法来启动线程,直接调用run方法是无法异步执行线程的,因为start方法会真正调用native方法创 建线程,并调用run方法。
当然,以上方法都是我们自己通过new关键字来创建的线程对象,很多时候我们在编程多线程程序的时候会用到线程池,因为创建过多的线程会消耗系统很多的资源,而且每次创建和销毁都会占用一些CPU时间,每个线程运行起来也会变慢,线程池会帮助我们创建线程和分配线程,实现线程对象的重用,这样会更高效,JDK5以后加入了并发包,也就是java.lang.concurrent包,我们也没必要自己去写线程池了,下面是线程池的使用代码:
package com.cugxw.thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; public class ThreadPoolTest { public static void main(String args[]) throws InterruptedException { System.out.println("-----------------------测试newFixedThreadPool----------"); // 在线程池中创建3个线程 ExecutorService execs = Executors.newFixedThreadPool(3); // 创建100 个线程目标对象 for (int index = 0; index < 10; index++) { Runnable run = new ThreadTO(index); // 执行线程目标对象 execs.execute(run); } execs.shutdown(); System.out.println("-----------------------测试newCachedThreadPool-------"); //使用线程池cache策略 ExecutorService execsCached = Executors.newCachedThreadPool(); // 创建10 个线程目标对象 for (int index = 0; index < 10; index++) { Runnable run = new ThreadTO(index); // 执行线程目标对象 execsCached.execute(run); } execsCached.shutdown(); System.out.println("-----------------------测试newScheduledThreadPool------"); // 在线程池中创建3个线程 ExecutorService execsSche = Executors.newScheduledThreadPool(3); // 创建10 个线程目标对象 for (int index = 0; index < 10; index++) { Runnable run = new ThreadTO(index); // 执行线程目标对象 execsSche.execute(run); } execsSche.shutdown(); System.out.println("-----------------------测试defaultThreadFactory-------"); //获取一个线程工厂类,用于创建新的线程 ThreadFactory tf = Executors.defaultThreadFactory(); tf.newThread(new ThreadTO(100)).start(); tf.newThread(new ThreadTO(101)).start(); tf.newThread(new ThreadTO(102)).start(); tf.newThread(new ThreadTO(103)).start(); tf.newThread(new ThreadTO(104)).start(); } } // 线程目标对象 class ThreadTO implements Runnable { int index = 0; public ThreadTO(int index) { this.index = index; } @Override public void run() { System.out.println("线程:" + Thread.currentThread().getName() + "调用了目标对象" + index); } }
发表评论
-
系统集成
2013-06-27 16:26 0实现异构系统的集成 ... -
ssg2
2013-03-27 14:33 0test -
ssg1
2013-03-27 14:29 0test -
workspace
2013-02-20 17:17 0work -
HashMap和Hashtable的比较
2013-01-24 12:29 1127这两个类是java中进行key-value存储、查询的常用 ... -
hash
2013-01-23 17:23 0两个类是java中进行key-value存储、查询的常用类, ... -
String、StringBuffer、StringBuilder的区别
2013-01-22 21:03 1251String、StringBuffe ... -
String、
2013-01-22 16:20 0String、StringBuffer、String ... -
factory
2013-01-18 16:32 0设计模式可分为三种类型:创建模式、结构模式和行为模式,这也从 ... -
javaoi
2013-01-10 16:16 0http://www.ibm.com/developerwor ... -
基于java的守护进程(deamon)开发
2012-12-25 17:33 0package com.cugxw.deamon; im ... -
Java应用层同步通信HttpURLConnection+Servlet(二)
2012-12-24 15:18 1910本片文章将给出一个传输对象序列化字节流的实例,实际上对上篇文 ... -
Java应用层同步通信HttpURLConnection+Servlet(一)
2012-12-24 14:58 2108在多层架构的设计中,实现系统间通信时,我们常常会选择webse ... -
test
2012-12-12 16:42 0Software Project Management Col ... -
Java的多线程控制
2012-10-19 15:58 809->Java的多线程控制在多线程编程中经常会用到,线程在 ... -
测试XmlHandler,接上篇(自己实现的XML和Entity映射工具)
2012-10-12 16:26 1552关于XmlHandler的单元测试代码: package t ... -
自己实现的XML和Entity映射工具XmlHandler
2012-10-12 16:23 2127公司不允许随便下载第三方jar包,但是公司lib库中的jar又 ...
相关推荐
### Java线程创建与管理:深入理解与实践指南 #### 引言 多线程作为Java程序设计中的重要概念之一,使开发者能够构建并行执行的任务,进而提高程序的效率和响应速度。Java语言提供了丰富的工具和技术来支持线程的...
Java线程是并发编程的基础,它允许程序同时执行多个任务,极大地提高了程序的效率和响应速度。在Java中,有四种主要的线程创建方法,它们各有特点,适应不同的应用场景。接下来,我们将深入探讨这四种方式及其使用...
线程最基本的知识,主要是创建线程,等等。
Java 线程创建有两种方法: 1. 继承 Thread 类,重写 run 方法:通过继承 Thread 类并重写 run 方法来创建线程,这种方法可以使线程具有自己的执行逻辑。 2. 实现 Runnable 接口:通过实现 Runnable 接口来创建线程...
在Java编程语言中,线程是程序执行...通过这个基础的Java线程创建实例,新手可以学习到线程的基本概念和操作。进一步深入,可以研究更复杂的并发控制、线程池管理和线程安全编程,这些都是Java多线程开发中的核心技能。
在Java编程语言中,创建线程是实现并发执行任务的关键步骤。Java提供了两种主要的方法来创建线程,分别是直接继承自`Thread`类和实现`Runnable`接口。这两种方法各有其特点和适用场景。 1. **继承Thread类**: 当...
【Java线程创建与启动】 创建Java线程主要有两种方式: 1. 扩展`java.lang.Thread`类:自定义Thread类,覆盖`run()`方法。例如: ```java class MyThread extends Thread { public void run() { // 代码执行逻辑 ...
根据提供的信息,我们可以推断出这份文档主要关注的是Java线程的相关内容。下面将围绕“Java线程”这一主题展开详细的介绍与解释。 ### Java线程基础 在Java语言中,线程是程序执行流的基本单元。一个标准的Java...
该图形展示了Java线程从创建到终止的整个生命周期,并详细介绍了每种状态的特点和转换规则。 NEW(初始化状态) 在Java线程的生命周期中,NEW是最初始的状态。在这个状态下,线程对象已经创建,但尚未启动。只有...
此外,Java中的线程创建方式还包括使用Runnable接口、Thread类、Executor框架等。不同的线程创建方式都有其优缺,需要根据实际情况选择合适的线程创建方式。 本文主要介绍了Java使用Callable和Future创建线程操作的...
Java线程是并发编程的核心部分,它允许程序在同一时间执行多个独立的任务,从而提高系统效率和响应速度。本文将深入探讨Java线程的概念、生命周期、实现方式以及相关的同步机制。 首先,理解线程的基本概念至关重要...
Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而提高系统效率和响应速度。在Java中,线程可以分为用户线程和守护线程,前者是程序运行的基础,而后者是在所有用户线程结束时才终止的后台...
学习Java线程,理解其创建、状态转换、调度和控制,以及如何处理线程间的互斥和同步,对于开发高效、稳定的并发程序至关重要。通过深入研究这些概念,开发者能够编写出更符合现代计算需求的高质量软件。
Java线程池是一种高效管理线程的机制,它允许开发者预先创建一定数量的线程,然后根据需求将任务提交到线程池中进行执行。线程池的核心在于它能够有效地控制运行的线程数量,避免因为频繁创建和销毁线程而产生的性能...
Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的并发性和效率。本教程将深入探讨Java线程的使用,帮助开发者掌握这一关键技术。 一、线程基础 1. **线程的概念**:线程...
本文将深入解析Java线程的相关知识点,包括线程的定义、创建、状态管理、线程同步和安全问题。 1. **线程定义** 在Java中,线程是进程中的单一顺序控制流,是程序执行的基本单元。线程在进程的上下文中运行,共享...
《Java线程(第三版)》是一本深入探讨Java线程技术的专业书籍,旨在帮助开发者理解和掌握Java平台上的多线程编程。Java线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而充分利用系统资源,提高程序的...
下面将详细讲解如何利用Java创建一个TCP服务器,使用线程来监听端口并处理连接。 一、TCP服务器基础 TCP是一种面向连接的、可靠的传输协议,它保证了数据包在传输过程中的顺序和完整性。在Java中,我们可以使用`...
JAVA线程dump的分析 JAVA线程dump是指在JAVA程序中,当前线程的状态和调用堆栈的快照,能够帮助开发者了解当前程序的执行情况,诊断问题和性能瓶颈。生成JAVA线程dump的方法在不同的操作系统下是不同的,在Windows...
Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...