文档章节

Java并发编程初级篇(一):线程实现与运行的两种方式

阿拉德大陆的魔法师
 阿拉德大陆的魔法师
发布于 2016/11/21 11:29
字数 591
阅读 40
收藏 0

通过继承Thread类来实现一个线程

线程的创建:

public class MyThread extends Thread {
    private int num = 5;

    @Override
    public void run() {
        while (num > 0) {
            System.out.println("Thread:" + Thread.currentThread().getName() + ", consume " + num);
            num--;
            try {
                sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

线程的运行:

public static void main(String[] args) {
    MyThread thread1 = new MyThread();
    MyThread thread2 = new MyThread();
    MyThread thread3 = new MyThread();

    thread1.start();
    thread2.start();
    thread3.start();
}

运行结果:

Thread:Thread-0, consume 5
Thread:Thread-1, consume 5
Thread:Thread-2, consume 5
Thread:Thread-0, consume 4
Thread:Thread-2, consume 4
Thread:Thread-1, consume 4
Thread:Thread-0, consume 3
Thread:Thread-1, consume 3
Thread:Thread-2, consume 3
Thread:Thread-0, consume 2
Thread:Thread-2, consume 2
Thread:Thread-1, consume 2
Thread:Thread-0, consume 1
Thread:Thread-2, consume 1
Thread:Thread-1, consume 1

通过实现Runnable接口来实现一个线程

线程的创建:

public class MyRunnable implements Runnable {
    private int num = 5;

    @Override
    public void run() {
        while (num > 0) {
            System.out.println("Thread:" + Thread.currentThread().getName() + ", consume " + num);
            num--;
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

第一种运行方式:

public static void main(String[] args) {
    Thread thread1 = new Thread(new MyRunnable());
    Thread thread2 = new Thread(new MyRunnable());
    Thread thread3 = new Thread(new MyRunnable());

    thread1.start();
    thread2.start();
    thread3.start();
}

第一种方式运行结果:

Thread:Thread-0, consume 5
Thread:Thread-2, consume 5
Thread:Thread-1, consume 5
Thread:Thread-0, consume 4
Thread:Thread-2, consume 4
Thread:Thread-1, consume 4
Thread:Thread-2, consume 3
Thread:Thread-1, consume 3
Thread:Thread-0, consume 3
Thread:Thread-1, consume 2
Thread:Thread-0, consume 2
Thread:Thread-2, consume 2
Thread:Thread-1, consume 1
Thread:Thread-2, consume 1
Thread:Thread-0, consume 1

第二种运行方式:

public static void main(String[] args) {
	Runnable runnable = new MyRunnable();

	Thread thread1 = new Thread(runnable);
	Thread thread2 = new Thread(runnable);
	Thread thread3 = new Thread(runnable);
        
	thread1.start();
	thread2.start();
	thread3.start();
}

第二种方式运行结果:

Thread:Thread-0, consume 5
Thread:Thread-1, consume 4
Thread:Thread-2, consume 3
Thread:Thread-0, consume 2
Thread:Thread-1, consume 1

总结:

通过继承Thread类和实现Runnable接口都能够实现一个线程,但是实现Runnable接口创建的线程类可以交给多个Thread来运行。这类似于需要加工30个零件,第一种方式为交给三个人去做每个人加工10个零件,完成时间取决于最慢的哪个人;第二种方式为一共30个零件交给3个人去加工,速度快的人会为速度慢的人分担加工的零件,总体速度会提升。

© 著作权归作者所有

共有 人打赏支持
阿拉德大陆的魔法师
粉丝 25
博文 91
码字总数 83019
作品 0
西城
程序员
私信 提问
读书笔记之《Java并发编程的艺术》-并发编程基础

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
8
读书笔记之《Java并发编程的艺术》-线程池和Executor的子孙们

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
1
读书笔记之《Java并发编程的艺术》-并发编程容器和框架(重要)

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
1
并发酷刑: 在 Java 内存模型中测试代码

不知道你是否这么觉得,而对于我来说最烦恼的bug就是处理并发问题。除非你已经掌握了利用其他工具摒弃你现有的工具. 但是,这里还有另外一个例子,因为我们已经在这里讲述了很多关于Java的知...

oschina
2014/03/12
1K
0
从Java到JVM到OS线程睡眠

前言 Java 中有时需要将线程进入睡眠状态,这时一般我们就会通过使线程进入睡眠状态,接下去就看看执行该语句在 JVM 中做了什么。 简单例子 以下是一个简单的例子,使主线程睡眠5秒钟。 JVM ...

超人汪小建
08/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《阿里铁军》的读书笔记和读后感范文2600字

《阿里铁军》的读书笔记和读后感范文2600字: 在中国互联网,有一个流传很广的说法是,百度强在技术,腾讯强在产品,阿里强在运营。虽然发展到今天,已经不能再用这样简单的视角来看待这三个...

原创小博客
4分钟前
1
0
怎样实际项目中运用责任链模式

1 模式概要 1.1 简介 责任链模式为请求创建一个接收者对象链,每个接收者都包含对另一个接收者的引用,如果一个对象不能处理该请求,那么它会把请求传给下一个接收者,依此类推 责任链模式避...

小刀爱编程
19分钟前
1
0
【宇润日常疯测-004】JS 遍历数组如何快!快!快!

首先,我就是一后端全栈,对前端也只是会用罢了。闲的无聊来测测,不深究,只看表面,不喜勿喷! 遍历数组在写 JS 代码时候一定是经常用的,那么怎么遍历能达到最高效率呢,很多人一定没有测...

宇润
23分钟前
9
1
Linux系统如何定制History输出格式

Linux系统使用History命令来查看系统的运行记录,从而找出一些问题。但是History输出的数据中常常没有时间等信息。本文就来教大家Linux系统如何定制History输出格式。   具体方法如下 以r...

linuxprobe16
25分钟前
1
0
(一) pyhon 基础语法(数值 字符串 元组 列表 字典)

1、python的数据类型: 数值 字符串 列表 元组 字典; 数值类型包括; 整型(int) 长整型(long) 浮点型(float) 复数型 字符串; 可以通过type() 来查看是什么类型的; 注释:len()只支持 字符...

芬野de博客
25分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部