02_线程的创建和启动_继承Thread方式
【简述】
java使用Thread类代表线程,所有的线程都必须是Thread或者其子类的实例。
每个线程的任务就是完成一定的任务,实际上就是执行一段程序流。
【创建并启动多线程的步骤(集成Thread类方式)】
1.定义继承Thread类的子类,重写run方法:run()方法就代表了线程需要完成的任务,故run()方法称为:线程执行体。
2.创建线程对象:即创建Thread子类的实例。
3.启动线程:调用线程对象的start()方法来。
【示例代码FirstThread.java】
package com.Higgin.part01; //1.1定义继承Thread类的子类FirstThread
class FirstThread extends Thread{
//1.2重写run方法
public void run(){
for(int i=;i<;i++){
//注意:当线程继承Thread类时,直接使用this.getName()即可获得当前线程的名字
System.out.println(this.getName()+"===="+i);
}
}
} public class Demo1{ public static void main(String[] args) {
//2.创建线程对象
FirstThread t1=new FirstThread();
//3.启动线程
t1.start();
//2.创建线程对象
FirstThread t2=new FirstThread();
//3.启动线程
t2.start(); for(int i=;i<;i++){
//调用Thread.currentThrad().getName()可获得当前线程的名字
System.out.println(Thread.currentThread().getName()+"===="+i);
}
}
}
【注意!!!】
启动线程使用 start()方法,不是run()方法!!永远不要调用线程对象的run()方法!!!
调用start()方法,系统会把run()方法当成线程执行体来处理。
直接调用run()方法,则run()方法会立即被执行,系统会把线程对象当成一个普通对象来处理,run()方法也变成了一个普通的方法。
另外,直接调用线程对象的run()方法,则run()方法内不能通过getName()来获得当前执行线程的名字,而是需要使用Thread.currentThread先获得当前线程,再调用线程的getName()方法来获得线程的名字。
另外,调用了线程的run()方法之后,该线程已经不再处于新建状态,不要再次调用线程对象的start()方法,只能对处于新建状态的线程调用start()方法,否则会引发IllegalThreadStateException异常。
【运行结果】
【注意一:主线程勿忘】
java程序开始运行时,程序至少会创建一个主线程,不要忘记了,本例中的main()方法的方法体就是主线程的线程执行体。
【注意二:两个读取线程名字的方法的区别】
1. Thread.currentThread():currentThread()是Thread类的静态方法,该方法是获取当前正在执行的线程的线程对象。
2.getName():该方法是Thread类的实例方法,该方法返回调用该方法的线程的名字。
【注意三:关于线程名字】
1.默认情况下,主线程的名字是main,用户启动的线程名字依次是:Thread-0、Thread-1......
2.当然,可以通过setName(String name)来设置对应的线程的名字。
02_线程的创建和启动_继承Thread方式的更多相关文章
- 03_线程的创建和启动_实现Runnable接口方式
[线程的创建和启动的步骤(实现Runnable接口方式)] 1.定义Runnable接口的实现类,并重写其中的run方法.run()方法的方法体是线程执行体. class SonThread imp ...
- 04_线程的创建和启动_使用Callable和Future的方式
[简述] 从java5开始,java提供了Callable接口,这个接口可以是Runnable接口的增强版, Callable接口提供了一个call()方法作为线程执行体,call()方法比run() ...
- Java 线程的创建和启动
Java 使用 Thread 类代表线程,所有的线程对象都必须是 Thread 类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码). Java 使用线程执 ...
- JAVA学习笔记16——线程的创建和启动
Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码).Java使用线程执行体来代表这段 ...
- Java线程:创建与启动
Java线程:创建与启动 一.定义线程 1.扩展java.lang.Thread类. 此类中有个run()方法,应该注意其用法: public void run() 如果该线程是使用独立的 R ...
- Netty 学习(七):NioEventLoop 对应线程的创建和启动源码说明
Netty 学习(七):NioEventLoop 对应线程的创建和启动源码说明 作者: Grey 原文地址: 博客园:Netty 学习(七):NioEventLoop 对应线程的创建和启动源码说明 C ...
- JavaSE---多线程---线程的创建、启动
1.概述 1.1 Java中使用Thread类表示线程: 所有的线程对象必须是Thread类 或 其子类的实例: 每条线程的作用:完成一定的任务: Java中使用run方法来封装线程执行体 ...
- Java线程的创建及启动
1.继承Thread类,重写该类的run()方法. package samTest; import java.util.Scanner; /** * Created by Sam on 2018-01 ...
- Java基础-多线程-①线程的创建和启动
简单阐释进程和线程 对于进程最直观的感受应该就是“windows任务管理器”中的进程管理: (计算机原理课上的记忆已经快要模糊了,简单理解一下):一个进程就是一个“执行中的程序”,是程序在计算机上的一 ...
随机推荐
- SVG 矢量图形格式
SVG(Scalable Vector Graphics)是基于 XML 的一种矢量图形格式,它即可以作为单独的图形文件使用也可以嵌入到网页中并由 JavaScript 来操作,非常方便和灵活.SVG ...
- MySQL 常用语句 (汇集)
原文地址:MySql常用语句作者:wuyanle 一.mysql常用语句 创建,删除和最基本查询: 显示数据库 mysql->show databases; 创建数据库 mysql-> ...
- 动网论坛password暴力破解程序代码
<% response.buffer=false '为防止程序陷入死循环,初始化一些最大重试值 Dim MaxPassLen,MaxPassAsc MaxPassLen=20 'pass ...
- 【异构计算】OpenCL矩阵转置
介绍 矩阵转置,主要的技巧还是利用好local memory ,防止local memory,以及glabol memory的读取尽量是合并读写. 完整代码一: main.cpp代码 #include ...
- 学习笔记之Shell脚本的输出重定向
shell http://baike.baidu.com/link?url=qN3THt5ZJhQtwRJJkakWdz5-vZp4V9H3OmNP97XNhaoL-dqU-6rrFrYfHXmYv6 ...
- vb.net写的odbc连接dsn数据源和ole链接oracle的小例子
最近由于工作需要开始接触vb2010,也叫vb.net.相比vb6.0有面向对象编程的优势.同时接触一门新语言,要更快的实际应用起来,链接数据库是必不可少的.之前用vba写过一个售书工具,正好可以拿来 ...
- ORACLE 优化
本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了 ORACLE数据库的优化调整方案. 关键词 ORACLE数据库 环境 ...
- dedecms获取字段
在详情页中调用字段使用{dede:field name='title’/} 在列表页调用字段使用: {dede:list} 我是标题:[field:title/],我的的url:[field:youk ...
- oracle两种导出导入方式,即imp与impdp之比较
尽管使用了很多次impexp及impdpexpdp但是使用起来还是会遇到很多问题,现总结如下: 应用:将一个用户的所有表结构及索引,触发器,过程,函数等导入到另一用户里 imp/exp 导出用户表结构 ...
- 支持状态对象复用的RPC框架——SnakeRPC
SnakeRPC是我2年前(春节期间!)做的一个RPC框架,现与大家分享. 设计SnakeRPC的主要动机是,Hessian返回的状态对象(如:数据库连接对象.文件对象等)无法复用,而且它对Strea ...