Java多线程两种实现
来源:互联网 发布:专业的剪辑软件 编辑:程序博客网 时间:2024/06/06 01:36
在java中实现多线程的方式有两种,一种是继承Thread类,另一个是实现Runnable接口。
对于两种实现,各有优缺点。接下来进行对比总结一下。这两种方法,都可以实现多线程。
以下为两种实现的写法
继承Thread类的方式:
package com.zc.thread;public class MyThread extends Thread {private String name;public MyThread(String name) {super();this.name = name;}public void run() {for (int i = 0; i < 10; i++) {System.out.println("线程开始:" + this.name + ",i=" + i);}}}
实现Runnable接口的方式:
package com.zc.runnable;public class MyRunnable implements Runnable {private String name;public MyRunnable(String name) {this.name = name;}public void run() {for (int i = 0; i < 10; i++) {System.out.println("线程开始:" + this.name + ",i=" + i);}}}
两种方式都可以实现多线程。两种方式的区别基本就是 继承 和实现接口的区别。初次之外,就是实现Runnable接口可以实现资源的共享。
对于继承Thread类,会有一些局限性。因为java中的类不能继承多个类,但是可以实现多个接口。所以实现Runnable多少会有一些便利。
因为这两种方式,就是换汤不换药。Thread类仍然是实现的Runnable接口。
run方法 和 start方法区别:
在以上两种实现多线程的方式中,都需要重写run方法。而要想启动线程,就必须调用该类的start方法。这样JVM才会给分配一个线程。进而实现 多线线程的同步执行。即:start会协调系统的资源。
那么如何实现,多个线程之间的资源共享呢?
首先编写一个自己的Test类
package com.zc.thread;public class SellThread extends Thread{private int ticket = 10;@Overridepublic void run() {for (int i = 0; i < 20; i++) {if (this.ticket > 0) {System.out.println("卖票:ticket" +",第"+ this.ticket--);}}}}
如果只有一个售票员的话,那么这个问题就不需要讨论了,这样就是一个单一的线程。直接用即可。
那么如何实现三个售票员的情况呢?接下来看一下下面这种情况:
public class ticketTest {public static void main(String[] args) { TicketSellThread tst1=new TicketSellThread(); TicketSellThread tst2=new TicketSellThread(); TicketSellThread tst3=new TicketSellThread(); tst1.start(); tst2.start(); tst3.start();}}
上面的这种情况是否可以满足 三个售票员的售票点呢?
很显然,售票的情况不对,三个售票员 售出了 总数 那么多的票,是三个人的资源 不共享造成的。
要想实现,三个售票员同享一个资源。那么就应该用同一个Thread去start 三个线程。
public static void main(String[] args) { TicketThreadR ticketThread = new TicketThreadR(); Thread th1 = new Thread(ticketThread); //线程一 Thread th2 = new Thread(ticketThread); //线程二 Thread th3 = new Thread(ticketThread); //线程三 th1.start(); th2.start(); th3.start(); }
接下来看一下结果:
虽然打印情况不是按照顺序打印的,但是实现了资源共享。
对比来说,实现Runnable类的Thread进行start的时候,会达到资源共享。而如果使用继承Thread的实现方法来调用start资源是得不到共享的。
0 0
- Java多线程两种实现
- java多线程------实现多线程两种方式
- Java实现多线程的两种方式
- Java两种方式实现多线程对比
- java实现多线程的两种方法
- java实现多线程的两种方法
- java--多线程实现两种方式
- Java实现多线程的两种方式
- Java多线程实现的两种方式
- java多线程两种实现方式
- Java 多线程实现的两种方式
- Java中的两种多线程实现方式
- java 多线程 两种实现方式
- JAVA多线程的两种实现方法
- Java多线程的两种实现方式
- 【java】多线程的两种实现
- JAVA多线程实现的两种方式
- java 实现多线程的两种方式
- Longest Palindromic Substring
- C++类型转换
- TLD视觉跟踪算法
- 枚举
- 必须声明元素类型 "typeAliases"
- Java多线程两种实现
- 120.Oracle数据库SQL开发之 PLSQL编程——包
- Spring4快速入门第四章注解装配bean属性
- 2013 蓝桥杯 连号区间数 (29`)
- Oracle数据库基础
- faac在iOS下编译为arm7, arm7s, arm64的方法
- 【LeetCode从零单刷】Kth Largest Element in an Array
- 121.Oracle数据库SQL开发之 PLSQL编程——触发器
- 云计算、PaaS开发、企业云平台搭建