Java多线程中的Runnable和Thread
摘要:
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限。
用法:
Thread:
package org.thread.demo;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); } } }
package org.thread.demo;import org.thread.demo.MyThread;public class ThreadDemo01 { public static void main(String[] args) { MyThread mt1=new MyThread("线程a"); MyThread mt2=new MyThread("线程b"); mt1.run(); mt2.run(); } }
但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。
public class ThreadDemo01 { public static void main(String[] args) { MyThread mt1=new MyThread("线程a"); MyThread mt2=new MyThread("线程b"); mt1.start(); mt2.start(); } }
这样程序可以正常完成交互式运行。
Runnable:
public interface Runnable{ public void run(); }
package org.runnable.demo; class MyThread implements Runnable{ private String name; public MyThread(String name) { this.name = name; }public void run(){ for(int i=0;i<100;i++){ System.out.println("线程开始:"+this.name+",i="+i); } } }
import org.runnable.demo.MyThread; public class ThreadDemo01 { public static void main(String[] args) { MyThread mt1=new MyThread("线程a"); MyThread mt2=new MyThread("线程b"); new Thread(mt1).start(); new Thread(mt2).start(); } }
在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。Thread类,有一个构造方法:public Thread(Runnable targer)接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。
区别:
Thread:
package org.demo.dff; class MyThread extends Thread{ private int ticket=10; public void run(){ for(int i=0;i<20;i++){ if(this.ticket>0){ System.out.println("卖票:ticket"+this.ticket--); } } } }
package org.demo.dff; public class ThreadTicket { public static void main(String[] args) { MyThread mt1=new MyThread(); MyThread mt2=new MyThread(); MyThread mt3=new MyThread(); mt1.start();//每个线程都各卖了10张,共卖了30张票 mt2.start();//但实际只有10张票,每个线程都卖自己的票 mt3.start();//没有达到资源共享 } }
Rannable:
package org.demo.runnable; class MyThread implements Runnable{ private int ticket=10; public void run(){ for(int i=0;i<20;i++){ if(this.ticket>0){ System.out.println("卖票:ticket"+this.ticket--); } } } }
package org.demo.runnable; public class RunnableTicket { public static void main(String[] args) { MyThread mt=new MyThread(); new Thread(mt).start();//同一个mt,但是在Thread中就不可以,如果用同一 new Thread(mt).start();//个实例化对象mt,就会出现异常 new Thread(mt).start(); } }
虽然现在程序中有三个线程,但是一共卖了10张票,也就是说使用Runnable实现多线程可以达到资源共享目的。
原文:
追寻.java线程系列---Runnable和Thread的区别[2012-03-01](2014-07-11).http://blog.csdn.net/wwww1988600/article/details/7309070
Java多线程中的Runnable和Thread相关推荐
- java多线程中的join方法详解
java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...
- Java多线程中使用ReentrantLock、synchronized加锁 简单举例
Java多线程中使用ReentrantLock.synchronized加锁 简单举例 public class Demo {final static Lock lock = new Reentran ...
- java 多线程的单例模式,Java多线程中的单例模式两种实现方式
Java多线程中的单例模式 一.在多线程环境下创建单例 方式一: package com.ietree.multithread.sync; public class Singletion { priv ...
- java多线程同步与死锁_浅析Java多线程中的同步和死锁
Value Engineering 1基于Java的多线程 多线程是实现并发机制的一种有效手段,它允许编程语言在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间相互独立,且与进程一样拥有独立 ...
- Java多线程中的ThreadLocal,可继承,可修改
Java多线程中的ThreadLocal,可继承,可修改. package test;import java.util.Date;public class InheritableThreadLocal ...
- java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?
转载自 java多线程中的死锁.活锁.饥饿.无锁都是什么鬼? 死锁.活锁.饥饿是关于多线程是否活跃出现的运行阻塞障碍问题,如果线程出现了这三种情况,即线程不再活跃,不能再正常地执行下去了. 死锁 死锁 ...
- Java多线程中static变量的使用
Java中 没处理好同步 导致两个线程同时为一个static变量赋值 会导致什么后果? Java中 没处理好同步 导致两个线程同时为一个static变量赋值 会导致什么后果?仅仅是多耗资源还是会引发异 ...
- 【Java之多线程(二)】(***重要***)Java多线程中常见方法的区别,如object.wait()和Thread.sleep()的区别等
1.Java中Thread和Runnable的区别??? 区别: 在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处: 避免点 ...
- JAVA多线程之Runnable和Thread比较
在我们开发的过程中常常会碰到多线程的问题,对于多线程的实现方式主要有两种:实现Runnable接口.继承Thread类.对于这两种多线程的实现方式也是有着一些差异.既然实现了多线程那必然离不开管理这些 ...
最新文章
- android除去标题栏或全屏
- 【干货】用Axure做原型,一秒钟提高效率的必知技巧总结
- 纪中B组模拟赛总结(2020.2.3)
- 二级省市联动下拉菜单
- 推荐一份 Google 面试指南
- wordpress电商独立站模板
- 怎样用52单片机做计算机,利用串口小助手实现AT89S52单片机简易计算器完整程序(Keil)...
- Laravel:关于with用法 OneByOne 关联(避坑)
- unbuntu下载编译chromium
- 移动安全工具-jadx
- Echarts icon图标 默认样式 样式总结
- 照片秒变艺术肖像画,Github标星5.2K!
- VC2008 NewControl 示例
- torch.repeat()与numpy.repeat()和 numpy.tile()比较
- 信仰:生或者死——读海子、史铁生
- 【软件测试】测试人我明明测了,生产环境还出问题?又出幺蛾子......
- 跨国并购数据库:SDC跨国数据库、Thomson数据库、A股上市公司并购数据库等多指标数据(4W+)
- 苹果研发卫星技术,Facebook自建操作系统,Uber推空中出租车 | 科技前沿周报
- 如何准备、制作和演讲presentation,以及应该注意的问题
- python连接oracle报错DPI-1047