文档章节

线程的创建和运行

柳哥
 柳哥
发布于 2015/04/18 21:04
字数 481
阅读 78
收藏 2
点赞 0
评论 0

Java提供了两种方式来创建线程:

  • 继承Thread类,并且覆盖run()方法。

  • 创建一个实现Runnable接口的类。使用带参数的Thread构造器来创建Thread对象。

这里我们只以Runnable接口为例:

package concurrency;

public class Test1 {
    public static void main(String[] args) {
        for(int i = 1; i <= 10; i++) {
            Calculator calculator = new Calculator(i);
            Thread thread = new Thread(calculator);
            thread.start();
        }
    }
}

class Calculator implements Runnable {
    private int number;
    public Calculator(int number) {
        this.number = number;
    }
    @Override
    public void run() {
        for(int i = 1; i <= 10; i++) {
            System.out.printf("%s:  %d * %d = %d\n", 
                    Thread.currentThread().getName(),number,i,i*number);
        }
    }
}

当调用Thread对象的start()方法时,另一个执行线程将被创建。因而在我们的程序中,每次调用start()方法时,都会创建一个执行线程。

当一个程序的所有线程都运行完成时,更明确的说,当所有非守护(non-daemon)线程都运行完成的时候,这个Java程序将宣告结束。如果初始线程(执行main()方法的线程)结束了,其余的线程仍将继续执行直到它们运行结束。如果某一个线程调用了System.exit()指令来结束程序的执行,所有的线程都将结束。

对一个实现了Runnable接口的类来说,创建Thread对象并不会创建一个新的执行线程;同样的,调用它的run()方法,也不会创建一个新的执行线程。只有调用它的start()方法时,才会创建一个新的执行线程。

编写一个类并继承Thread类,在这个类里覆盖run()方法,然后创建这个类的对象,并且调用start()方法,也会创建一个执行线程,如例:

package concurrency;

public class Test2 extends Thread {
    private int number;
    public Test2(int number) {
        this.number = number;
    }
    public static void main(String[] args) {
        for(int i = 1; i <= 10; i++) {
            Test2 thread = new Test2(i);
            thread.start();
        }
    }
    @Override
    public void run() {
        for(int i = 1; i <= 10; i++) {
            System.out.printf("%s:  %d * %d = %d\n", 
                    Thread.currentThread().getName(),number,i,i*number);
        }
    }
}


© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 202
博文 394
码字总数 347782
作品 0
杭州
技术主管
java创建线程的三种方式(学习笔记)

参考书:疯狂java讲义,java程序设计基础。 1新建状态(newborn)当一个Thread类或者其子类的对象被声明或者是创建,但没有执行的这段状态称为新建状态。 2.就绪状态(runnable)就绪状态也称...

奔跑的码农 ⋅ 2016/05/18 ⋅ 0

多线程(一)

进程和线程的概述 进程就是应用程序在内存中分配的空间,也可理解为一个正在执行中的程序。每一个进程执行都有一个执行顺序,该顺序就是一个执行路径或者叫一个控制单元。 线程就是进程中负责...

yerenyuan_pku ⋅ 2017/10/08 ⋅ 0

Java线程池

我们平时在写程序中常常使用多线程来提高CPU以及其他资源的利用率,但是当CPU中的线程超过了CPU调度范围时,我们的程序就会变得缓慢甚至出现死锁导致程序卡死等现象。也有很多时候我们需要创...

邵鸿鑫 ⋅ 2016/02/29 ⋅ 0

fork并发进程处理

线程并发 处理僵尸线程 很多时候我们fork创建的子进程终止时,需要服务器进程进行清理,倘若未进行处理将会处理大量的僵尸线程,那么我们可以选择将进忽略,并交给init进程进行处理。 fork 创...

罗布V ⋅ 2016/03/07 ⋅ 0

Java线程池Executor框架

1.Exexctor简介 Executor的UML图:(常用的几个接口和子类) Executor:一个接口,其定义了一个接收Runnable对象的方法executor,其方法签名为executor(Runnable command) ExecutorService:...

一零贰IV ⋅ 04/15 ⋅ 0

并发编程(五):Executor框架

简介 Executor是JDK提供的一套线程框架,用于有效的控制线程。 Executor框架主要包含三个部分: 任务:包括Runnable和Callable,其中Runnable表示一个可以异步执行的任务,而Callable表示一个...

mengdonghui123456 ⋅ 2017/08/15 ⋅ 0

java 线程池管理类:Executors

java.util.concurrent 类 Executors java.lang.Object 继承者 java.util.concurrent.Executors 此类是个工具类,它提供对Executor、ExecutorService、ScheduledExecutorService、ThreadFacto......

岩之有理 ⋅ 2014/12/22 ⋅ 1

3、多线程(1)

一、概念 1、进程:通常被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动。一个程序可以有多个进程实例。 2、进程由两个部分组成: 1)操作系统用来管理进程...

hopegrace ⋅ 2010/08/12 ⋅ 0

java之多线程总结一

多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的。 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中...

双月通天 ⋅ 2015/11/21 ⋅ 0

线程的基本概念

一、线程的初步认识 1、区分进程、程序和线程 程序:没有执行的指令和相关数据的集合,没有任何运行的含义。 进程:正在运行的程序就是一个进程,当你运行一个程序,也就启动了一个进程。进程...

石飞飞 ⋅ 2016/09/25 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部