博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java多线程的两种实现方式
阅读量:4645 次
发布时间:2019-06-09

本文共 2057 字,大约阅读时间需要 6 分钟。

Java总共有两种方式实现多线程

方式1:通过继承Thread类的方式

 

package com.day04;/** * 通过继承Thread类并复写run方法来是实现多线程 *  * @author Administrator * */public class ThreadDemo1 extends Thread {    @Override    public void run() {        for (int i = 0; i < 4; i++) {            // 获取当前线程的名字            // String threadName = Thread.currentThread().getName(); //方式1            String threadName = super.currentThread().getName(); // 方式2            System.out.println(threadName + " print " + i);        }    }    public static void main(String[] args) {        // 创建线程对象        ThreadDemo1 t1 = new ThreadDemo1();        ThreadDemo1 t2 = new ThreadDemo1();        // 调用start方法启动多线程        t1.start();        t2.start();    }}

运行结果如下:

Thread-1 print 0

Thread-0 print 0
Thread-1 print 1
Thread-0 print 1
Thread-0 print 2
Thread-0 print 3
Thread-1 print 2
Thread-1 print 3

可以发现总共开启了两个线程,并且两个线程是随机打印出对应的序号,这是因为这两个线程在抢占系统资源是随机的,谁抢到,谁就执行打印语句。

方式1:通过实现Runnable接口来实现

 

package com.day04;/** * 通过实现Runnable接口来实现多线程 *  * @author Administrator * */public class ThreadDemo2 implements Runnable {    @Override    public void run() {        for (int i = 0; i < 4; i++) {            // 获取当前线程的名字            String threadName = Thread.currentThread().getName();            System.out.println(threadName + " print " + i);        }    }    public static void main(String[] args) {        // 创建线程对象        ThreadDemo2 t1 = new ThreadDemo2();        // 调用start方法启动多线程        new Thread(t1).start();        new Thread(t1).start();    }}

运行结果如下:

Thread-0 print 0

Thread-0 print 1
Thread-1 print 0
Thread-0 print 2
Thread-1 print 1
Thread-1 print 2
Thread-1 print 3
Thread-0 print 3

可以发现总共开启了两个线程,并且两个线程是随机打印出对应的序号,这是因为这两个线程在抢占系统资源是随机的,谁抢到,谁就执行打印语句。

总结:

1.继承Thread类并复写run方法的方式:

优点:实现简单。

缺点:因为java是单继承,所以当某个类继承了Thread类,就不能在继承其他的类了。

2.通过实现Runnable接口的方式

缺点:实现稍微复杂点。

优点:因为是通过实现接口的方式,所以它可以再继承其他的类,不存在局限性。

注意的是:继承Thread如果要获取当前线程的名字可以通过Thread.currentThread().getName()之外,还可以通过super.currentThread().getName()这种方式来获取,而实现接口的方式只能通过Thread.currentThread().getName()这种方式来获取。

 

转载于:https://www.cnblogs.com/nanyangke-cjz/p/7055267.html

你可能感兴趣的文章
1035等差数列末项计算
查看>>
CDMA鉴权
查看>>
ASP.NET MVC Identity 兩個多個連接字符串問題解決一例
查看>>
过滤器与拦截器区别
查看>>
USACO 1.5.4 Checker Challenge
查看>>
第二阶段站立会议7
查看>>
[18]Debian Linux Install GNU GCC Compiler and Development Environment
查看>>
JAVA多线程
查看>>
ACE(Adaptive Communication Environment)介绍
查看>>
delphi 更改DBGrid 颜色技巧
查看>>
python编码问题
查看>>
POJ 2031 Building a Space Station
查看>>
面向对象1
查看>>
编程开发之--java多线程学习总结(5)
查看>>
register_globals(全局变量注册开关)
查看>>
as3调用外部swf里的类的方法
查看>>
如何让 zend studio 10 识别 Phalcon语法并且进行语法提示
查看>>
任意阶幻方(魔方矩阵)C语言实现
查看>>
视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
查看>>
第五次作业
查看>>