- 浏览: 497083 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (339)
- C# (2)
- Java集合 (7)
- Java设计模式 (15)
- Java基础 (31)
- Java-Spring (7)
- Java-Spring AOP (9)
- Java-Spring Transaction (6)
- Java-Hibernate (13)
- Jsp (7)
- JSTL (2)
- 加密解密 (13)
- sql (3)
- 数据库技术 (7)
- JQuery (2)
- css (3)
- JavaScript (19)
- Linux (34)
- 项目管理 (5)
- Tomcat (5)
- Oracle (4)
- axis2 (5)
- Linux c/c++ (40)
- Linux 防火墙及抓包分析 (10)
- Linux 环境配置 (3)
- Linux 高级命令 (14)
- Linux Server 配置 (9)
- c++ 内存管理 (4)
- JUnit (1)
- SSL 通信 (2)
- windows 系统调试 (8)
- 字符串处理 (8)
- 排序算法 (7)
- ACE (1)
- IT技术 (1)
- 敏捷开发 (1)
- TCPIP (4)
- 汇编语言 (7)
- STL (2)
- Struts (1)
- iBatis (3)
- 音视频开发 (2)
- Java多线程 (3)
- 架构设计 (2)
- Java网络编程 (1)
- Ubantu (0)
- Eclipse (2)
最新评论
-
df270464278:
请问博主有遇到中文乱码的问题吗?就是json字符串里面包含中文 ...
cur发送json字符串, post 请求 -
ykbj117:
你们知道刘绍华么?就是北邮的一个教授,专门研究WebRTC的资 ...
WebRTC -
隐形的翅膀:
不会用powershell
去除SVN标志 -
lengbamboo:
改注册表比较危险,给个powershell的脚本:powers ...
去除SVN标志 -
hedong56:
[/b][b][i][/i][u][/u][flash=20 ...
JAVASCRIPT定义对象的四种方式
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限,下面看例子:
但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在JDK的文档中可以发现,一旦调用start()方法,则会通过JVM找到run()方法。下面启动
start()方法启动线程:
package org.thread.demo;
public class ThreadDemo01 {
public static void main(String[] args) {
MyThread mt1=new MyThread("线程a");
MyThread mt2=new MyThread("线程b");
mt1.start();
mt2.start();
}
};
这样程序可以正常完成交互式运行。
Runnable接口
在实际开发中一个多线程的操作很少使用Thread类,而是通过Runnable接口完成。
例子:
但是在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。
此时观察Thread类,有一个构造方法:public Thread(Runnable targer) 此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。(start()可以协调系统的资源):
两种实现方式的区别和联系:
在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
->避免点继承的局限,一个类可以继承多个接口。
->适合于资源的共享
以卖票程序为例,通过Thread类完成:
如果用Runnable就可以实现资源共享,下面看例子:
虽然现在程序中有三个线程,但是一共卖了10张票,也就是说使用Runnable实现多线程可以达到资源共享目的。
Runnable接口和Thread之间的联系:
public class Thread extends Object implements Runnable
发现Thread类也是Runnable接口的子类。
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; public class ThreadDemo01 { public static void main(String[] args) { MyThread mt1=new MyThread("线程a"); MyThread mt2=new MyThread("线程b"); mt1.run(); mt2.run(); } }
但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在JDK的文档中可以发现,一旦调用start()方法,则会通过JVM找到run()方法。下面启动
start()方法启动线程:
package org.thread.demo;
public class ThreadDemo01 {
public static void main(String[] args) {
MyThread mt1=new MyThread("线程a");
MyThread mt2=new MyThread("线程b");
mt1.start();
mt2.start();
}
};
这样程序可以正常完成交互式运行。
Runnable接口
在实际开发中一个多线程的操作很少使用Thread类,而是通过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); } } };
但是在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。
此时观察Thread类,有一个构造方法:public Thread(Runnable targer) 此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。(start()可以协调系统的资源):
package org.runnable.demo; 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接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
->避免点继承的局限,一个类可以继承多个接口。
->适合于资源的共享
以卖票程序为例,通过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();//没有达到资源共享 } }
如果用Runnable就可以实现资源共享,下面看例子:
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,在实现Runable接口的类中不会有问题, 但在继承Thread的类中就不可以,如果用同一个实例化对象mt,就会出现异常 new Thread(mt).start(); new Thread(mt).start(); } };
虽然现在程序中有三个线程,但是一共卖了10张票,也就是说使用Runnable实现多线程可以达到资源共享目的。
Runnable接口和Thread之间的联系:
public class Thread extends Object implements Runnable
发现Thread类也是Runnable接口的子类。
发表评论
-
Java中的路径问题
2014-12-26 15:51 5151. 得到当前工作路径 String workingDir ... -
优化Java虚拟机(大全+实例)
2014-11-27 10:34 410http://www.open-open.com/lib/vi ... -
PlayFrameWork 注解
2014-11-16 11:19 951Play Framework框架 JPA常用注解 1、@Ent ... -
页面多次提交
2014-11-15 05:03 342一点拙见,仅供参考: ... -
Java类的加载机制
2014-11-14 20:34 806一. Java类加载机制 Java程序运行的场所是内存,当在 ... -
Java内部匿名类
2014-10-17 20:54 669http://www.cnblogs.com/nerxious ... -
JAVA中关于链表的操作和基本算法
2014-10-17 09:29 1700import java.util.HashMap; ... -
Java 面试题1
2014-10-17 07:08 9241、 多态就是指不同类的对象对同一消息做出的相应. 2、Str ... -
数据结构
2014-10-02 13:02 5021. Vector Vector v = new Vecto ... -
线程与异常
2014-10-02 12:52 5351. NumberFormatException 2. IOE ... -
包,接口
2014-10-02 12:46 3831. 没有访问控制符,对同一包中的类可见 2. private ... -
数组的初始化
2014-09-25 21:18 5841. 使用new创建数组对象时,其所有元素都被自动地初始化,数 ... -
Java NIO
2014-07-31 13:45 688Server Side import java.io.I ... -
匿名构造方法 与 ShutDownHook
2014-07-30 13:24 732匿名构造方法,在任何构造方法之前被调用。这样保证我们初始化Bu ... -
java remote debug
2013-06-20 20:44 2606As we can see from the previou ... -
DateUtil.java
2012-09-18 16:51 3706package cn.wsria.util.date; ... -
java.util.Properties类的使用
2012-09-01 15:03 1022import java.util.*; ... -
Java 中遍历 Session or Request
2011-07-01 09:42 7177java.util.Enumeration e = ... -
Eclipse 中 使用外部jar 来调试java application
2011-06-22 10:25 21451. write a java application 2 ... -
认识Thread的start和run
2011-06-20 16:48 623认识Thread的start和run 1) start: ...
相关推荐
在Java中,有两种方式来创建和管理线程:通过继承`Thread`类和实现`Runnable`接口。 1. 继承`Thread`类: 当你需要一个具有自定义行为的线程时,可以创建一个新的类,该类继承自`Thread`。重写`Thread`类的`run()`...
在Java编程语言中,"java-龟兔赛跑Runable"是一个典型的多线程示例,它基于经典的寓言故事“龟兔赛跑”。在这个场景中,龟和兔被实现为两个独立的线程,分别代表`Runnable`接口的实例。下面我们将详细探讨这个主题,...
Java多线程Runable售票系统实现过程解析 本文主要介绍了Java多线程Runable售票系统实现过程解析,通过示例代码进行了非常详细的介绍,对大家的学习或者工作具有一定的参考学习价值。 Java多线程 Java多线程是Java...
实现Runable接口的方式: 1创建实现Runable接口的实现类:必须实现run 方法 2创建1中对应的Runable接口的实现对象 3创建Thread对象 利用Thread Runable target 4调用Thread类的start 方法启动线程
Thread 和 Runnable 是实现 Java 多线程的两种方式,Runnable 是接口,Thread 是类,建议使用 Runnable 实现 Java 多线程,不管如何,最终都需要通过 thread.start() 来使线程处于可运行状态。 Thread 的 start 和 ...
10. **多线程**: Java内置了对多线程的支持,可以使用`Thread`类或实现`Runnable`接口创建线程。`Thread.sleep()`用于暂停线程,`synchronized`关键字用于同步访问共享资源。 11. **网络编程**: Java的`java.net`包...
Java是一种广泛使用的面向对象的编程语言,其设计目标是具有高度的可移植性、健壮性和安全性。在“Java课件基本语法”中,我们将会深入探讨Java的核心概念,包括类、接口、继承以及对象的使用。这些是理解Java编程的...
Java的多线程是基于线程类的,通过Runable接口实现。Java虚拟机(JVM)负责线程的创建、调度和管理。C++则在语言层面提供了线程支持,并允许直接操作线程。 9. Windows编程: Java的Swing和AWT提供了跨平台的图形...
2. **多线程与 Runnable**:题目中给出的代码 `public class X extends Thread implements Runable{...}` 会因在第一行产生编译错误,因为类 X 已经继承了 Thread 类,不能同时实现 Runnable 接口,因为这会导致继承...
- **java.lang**:包含基础类,如Thread、Exception、System等。 - **java.awt**:提供GUI构建类和绘图类。 - **java.io**:包含输入/输出流类,如FileInputStream和FileOutputStream。 - **java.util**:提供实用类...
42. **Runable 实现**:在示例程序中,`X` 类同时继承了 `Thread` 并实现了 `Runnable`,这是合法的,但通常不需要同时继承和实现。 43. **接口定义**:使用 `interface` 关键字定义接口。 44. **类修饰符**:在...
Java是一种广泛使用的面向对象编程语言,其面向对象的特性之一就是多态性。多态性是面向对象编程的重要概念,它允许我们使用一个接口来表示多种类型的数据,从而增加了代码的灵活性和可重用性。在Java中,多态性的...
7.JAVA线程的概念,对Thread,Runable的实现原理做了丰富的图例 8.JAVA网络的概念,列举了丰富的Socket编程实例 9.使用JDBC,ODBC连接数据库,介绍了Connection,Statement ,ResultSet的使用方法和注意事项。
42. **Runable 实现**:实现 `Runnable` 接口可以避免单一继承的问题,因为 Java 不支持多重继承。 43. **接口关键字**:`interface` 关键字用于定义接口。 44. **类修饰符**:在定义类头时,可以使用的修饰符有 `...
- Thread vs Runable (new Thread <-> new Runnable) - Callable vs Runable (new Callable <-> new Runnable) - Futures - isDone false is if not ready - get - exception if get(time, unit) when ...
在Java编程语言中,线程是程序执行的基本单元,它允许程序同时执行多个任务。本文将深入探讨如何通过实现`Runnable`接口和继承`Thread`类两种方式来创建线程,并实现在屏幕上随机画正方形的程序。 首先,让我们了解...
位置管理器 要在 Android 设备上获取位置信息,您需要执行“一些”步骤! 那些是什么? 让我们来看看... 检查应用程序是否需要权限如果没有,请向用户询问运行时权限检查用户是否授予权限假设我们获得了许可,现在呢...
Thread 线程类是 Java 中 Thread 和 Runnable 接口的实现,它提供了线程的基本操作和管理。下面是对 Thread 类的详细介绍: 1. Runnable 接口 Runnable 接口是 Thread 类的基类,它提供了 run() 方法,该方法是...
3. Runnable接口:Runable接口中包含一个run()方法,用于实现线程的执行逻辑。所以答案是A。 4. 访问类成员:要在Example类的main方法中直接访问私有成员x,需将其声明为static,因为静态成员不受实例化影响,可以...
多线程及Runable 和Thread的区别 多线程是一种常用的编程技术,用于提高程序的执行效率和响应速度。在 Java 中,多线程可以通过继承 Thread 类或实现 Runnable 接口来实现。虽然这两种方法都可以实现多线程,但它们...