文档章节

线程的创建和运行

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

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);
        }
    }
}


© 著作权归作者所有

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

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

奔跑的码农
2016/05/18
679
0
7-Java常用工具类-多线程

什么是线程? 要理解线程,我们得从进程说起。 进程的概念: 进程是指可执行程序并存放在计算机存储器的一个指令序列,它是一个动态执行的过程。 我们程序员边听音乐边写代码再挂着qq,这三个软...

天涯明月笙
08/09
0
0
多线程(一)

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

yerenyuan_pku
2017/10/08
0
0
fork并发进程处理

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

罗布V
2016/03/07
88
0
Java线程池

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

邵鸿鑫
2016/02/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

HBase 表修复在线方式和离线方式

一、在线修复 1.1 使用检查命令 $ ./bin/hbase hbck 该命令可完整修复 HBase 元数据信息;存在有错误信息会进行输出; 也可以通过如下命令查看详细信息: $ ./bin/hbase hbck -details 1.2 ...

Ryan-瑞恩
16分钟前
0
0
redis 系列二 -- 常用命令

1.基础命令 info ping quit save dbsize select flushdb flushall 2.键命令 2.1 set 直接赋值 set a a 2.2 get 取值 get a 2.3 exists 是否存在 exists a 2.4 expire 设置剩余时间 秒 expire......

imbiao
48分钟前
1
0
php foreach

<?php// 数组的引用$a=array(1,2,3,4,5);foreach($a as $key=>&$value){$value=$value*2;}print_r($a);echo " $key -------------------$value\r\n";/** * ...

小张525
56分钟前
1
0
12-利用思维导图梳理JavaSE-多线程

12-利用思维导图梳理JavaSE-多线程 主要内容 1.线程概念 2.线程开发 3.线程的状态 4.线程的同步和死锁 5.Java5.0并发库类 QQ/知识星球/个人WeChat/公众号二维码 本文为原创文章,如果对你有一...

飞鱼说编程
今天
0
0
JAVA集合之ArrayList

一、前言 Java 集合类提供了一套设计良好的支持对一组对象进行操作的接口和类,JAVA常用的集合接口有4类,分别是: Collection:代表一组对象,每一个对象都是它的子元素 Set:不包含重复元素...

木木匠
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部