文档章节

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

阿拉德大陆的魔法师
 阿拉德大陆的魔法师
发布于 2016/11/21 11:29
字数 591
阅读 38
收藏 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个人去加工,速度快的人会为速度慢的人分担加工的零件,总体速度会提升。

© 著作权归作者所有

共有 人打赏支持
阿拉德大陆的魔法师
粉丝 23
博文 91
码字总数 83019
作品 0
西城
程序员
读书笔记之《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
8
Java 编程之美:并发编程基础晋级篇

本文来自作者 加多 在 GitChat 上分享 「Java 并发编程之美:并发编程基础晋级篇」 编辑 | Mc Jin 借用 Java 并发编程实践中的话,编写正确的程序并不容易,而编写正常的并发程序就更难了! ...

gitchat
04/18
0
0
读书笔记之《Java并发编程的艺术》-并发编程容器和框架(重要)

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

Hi徐敏
2015/11/11
0
1
Java面试:投行的15个多线程和并发面试题

本文由ImportNew -一杯哈希不加盐 翻译自dzone。欢迎加入翻译小组。转载请见文末要求。 多线程和并发问题已成为各种 Java 面试中必不可少的一部分。如果你准备参加投行的 Java 开发岗位面试,...

ImportNew
08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

工作日志 ,城市ip地址整理

INSERT INTO sSELECT a.city,b.startip,b.endip FROM cityinfo a JOIN t_ip bON b.cheng LIKE CONCAT("%" ,a.city ,"%")ORDER BY a.cityHAVING COUNT(a.city)<=5ORD......

haifei2017
14分钟前
3
0
cdn是否可以抵御ddos的攻击

随着近年来来网络技术的不断进步,cdn不仅可以简单的用做网站加速,还能够更好的保护网站不被攻击。cdn在相关节点中成功的建立动态加速机制以及智能沉于等机制,能够帮助网站流量访问分配到每...

上树的熊
21分钟前
2
0
Oracle修改字符集

1.cmd下,cd到oracle数据库软件的服务器端 如:D:\app\Administrator\product\11.2.0\dbhome_1\BIN 2.输入set ORACLE_SID=你想进入的数据库的那个sid 3.输入 sqlplus /nolog 4.将数据库启动到...

lyle_luo
27分钟前
1
0
Xamarin Essentials教程打开文件

Xamarin Essentials教程打开文件 FileSystem类的OpenAppPackageFileAsync()方法可以用来打开App包中特定的文件,其语法形式如下: public static System.Threading.Tasks.Task<System.IO.St...

大学霸
38分钟前
1
0
Redis应用之分布式锁(set)

Redis应用之分布式锁(set) 在单机应用的场景下,我们常使用的锁主要是synchronized与Lock;但是在分布式横行的大环境下,显然仅仅这两种锁已经无法满足我们的需求; 需求:秒杀场景下,有若干...

GMarshal
51分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部