当前位置:首页 > 后端开发 > java线程几种实现

java线程几种实现

6个月前 (05-22)19

转自:http://www.cnblogs.com/liujichang/p/3150387.html

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

同步的实现方法有两种,分别是synchronized,wait与notify

先看一下java线程运行时各个阶段的运行状态

java实现多线程有两种方法

1、继承Thread类

2、实现Runnable接口

这两种方法的共同点:

不论用哪种方法,都必须用Thread(如果是Thead子类就用它本身)产生线程,然后再调用start()方法。

两种方法的不同点:

1、继承Thread类有一个缺点就是单继承,而实现Runnable接口则弥补了它的缺点,可以实现多继承

2、继承Thread类必须如果产生Runnable实例对象,就必须产生多个Runnable实例对象,然后再用Thread产生多个线程;而实现Runnable接口,只需要建立一个实现这个类的实例,然后用这一个实例对象产生多个线程。即实现了资源的共享性

基于以上两点所以建议用第二种方法

1 packagecn.itcast.demo1;2

3 public class MyThread extendsThread {4 privateString name;5 publicMyThread(String name){6 this.name =name;7 }8 //如果要使用多线程,则必须有一个方法的主体

9 public voidrun(){10 //打印输出

11 for(int i = 0;i < 10; i++){12 System.out.println(this.name + "----->运行");13 }14 }15

16 }

1 packagecn.itcast.demo1;2

3 public classDemo5 {4 public static voidmain(String[] args) {5 Runnable r1 = new MyThread("线程一");6 Runnable r2 = new MyThread("线程二");7 Runnable r3 = new MyThread("线程三");8

9 Thread t1 = newThread(r1);10 Thread t2 = newThread(r2);11 Thread t3 = newThread(r3);12

13 t1.start();14 t2.start();15 t3.start();16

17 }18

19

20 }

1 packagecn.itcast.demo1;2

3 public classDemo6 {4

5 public static voidmain(String[] args) {6 //TODO Auto-generated method stub

7 MyThread mt1 = new MyThread("线程A");8 MyThread mt2 = new MyThread("线程B");9 MyThread mt3 = new MyThread("线程C");10

11 mt1.start();12 mt2.start();13 mt3.start();14

15 }16

17 }

这是继承了Thread类,第一种方法产生多个Runnable实例对象,然后用Thread产生多个线程

第二种方法,因为这个类已经继承了Thread类,所以就可以直接利用它本身产生多个线程

程序2:

1 packagecn.itcast.demo1;2

3 public class MyThread1 implementsRunnable {4 private int ticket = 10;5

6 @Override7 public voidrun() {8 //TODO Auto-generated method stub

9 for(int i = 0; i < 500;i++){10 if(this.ticket > 0){11 System.out.println("卖票------》" + (this.ticket--));12 }13 }14

15 }16

17 }

1 packagecn.itcast.demo1;2

3 public classDemo7 {4

5 public static voidmain(String[] args) {6 //TODO Auto-generated method stub

7 MyThread1 mt = newMyThread1();8 Thread t1 = newThread(mt);9 Thread t2 = newThread(mt);10 Thread t3 = newThread(mt);11

12 t1.start();13 t2.start();14 t3.start();15

16

17 }18

19 }

这个程序是实现Runnable了,产生一类的实例对象,然后用Thread产生多个线程。

作者:南城游子
来源链接:https://blog.csdn.net/weixin_36474001/article/details/114068478

“java线程几种实现” 的相关文章

java中怎么判断相等

1.Java中有两种判断相等的方法: 1.1首先是==运算符 对于基本类型而言,==运算符比较的是值是否相等(本质也是比较的地址,因为常量在常量池中...

java中通过反射判断类中的属性是否为空

public class ReflesStudyTest { public static void main(String[]...

java对象判空

在实际书写代码的时候,经常会因为对象为空,而抛出空指针异常java.lang.NullPointerException 为了避免这种情况出现可以使用...

java如何实现多线程

/** * 使用Thread类模拟4个售票窗口共同卖100张火车票的程序 * * 没有共享数据,每个线程各卖100张火车...

java多线程分发问题——多线程求和

最近读了<java编程思想>的分发部分,又碰到一个网友想利用多线程求和并且汇总求最后结果,具体要求是这样的“写十个线程,第一个线程求1到10的和,第二个11到2...

Java集合,集合的方法,集合的遍历

Java集合,集合的方法,集合的遍历

package com.atgui.java; import org.junit.Test; import java.u...

java多线程中的三种特性

java多线程中的三种特性 原子性(Atomicity) 原子性是指在一个操作中就是cpu不可以在中途暂停然后再调度,既不被中断操作,要不执行完成,要不就不执行。 如果...

ubuntu下配置java环境变量

一. 解压安装jdk   在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录,  执行命令 ./jdk-6u...

Java基础-多线程-②多线程安全问题

Java基础-多线程-②多线程安全问题

什么是线程的安全问题? 上一篇 Java基础-多线程-①线程的创建和启动 我们说使用实现Runnable接口的方式来创建线程,可以实现多个线程共享资源:...

『Java多线程』基础之基础

『Java多线程』基础之基础

Java基础篇–多线程 文章目录 Java基础篇--多线程...