- 浏览: 91491 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (148)
- 全文检索 (1)
- java (29)
- xml (2)
- json (2)
- redis springmvc (1)
- Redis (5)
- 开发常识 (1)
- tomcat (2)
- 单元测试Junit (2)
- 设计模式 (2)
- spring (10)
- jvm (2)
- eclipse (4)
- echart (1)
- mybatis (1)
- mysql (3)
- web (1)
- js (2)
- PL/SQL (2)
- 其他 (1)
- 人生 (1)
- 安全 (2)
- jsp (2)
- 硬件电脑 (1)
- linux (3)
- git (10)
- oracle (8)
- ant (1)
- maven (2)
- 正则表达式 (2)
- chrome (1)
- 面试 (6)
- 多线程 (19)
- bug (11)
- java工具类 (3)
- 算法 (1)
- bug,git (1)
- shell (2)
- springmvc (2)
- Java8 (1)
- 消息队列-rocketmq (1)
- es (1)
- dubbo (0)
- spring cloud (0)
- hashmap (0)
- springboot (1)
- velocity (0)
package com.jbx.thread; /**声明实现Runnable接口的奇数/偶数序列线程 * Created by Administrator on 2018/7/11. */ public class NumberRunnable implements Runnable{ private int first; public NumberRunnable(int first){ this.first = first; } public NumberRunnable(){ this(0); } @Override public void run() { //线程体,实现Runnable接口 System.out.println(); for (int i = first; i < 50 ; i+=2) { System.out.print(i+" "); } System.out.println("结束! "); } public static void main(String [] args){ NumberRunnable odd = new NumberRunnable(1);//创建具有线程体的目标对象 Thread thread_odd = new Thread(odd,"奇数线程"); thread_odd.start(); new Thread(new NumberRunnable(2),"偶数线程").start(); } }
运行结果:
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 结束!
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 结束!
本例声明的NumberRunnable类实现Runnable接口,不是Thread的子类。NumberRunnable对象odd不是线程对象,没有start()等方法,但odd具有实现了的run()方法,这种对象可以作为一个线程对象的目标对象。
Thread类的run()方法声明如下:
public void run(){ //描述线程操作的线程体 if(target != null){ target.run(); //执行目标对象的run()方法 } }
由此可知,当目标对象为空时,Thread类的对象的run()方法为空。例如:
Thread t1 = new Thread(); //t1的run()方法为空
当目标对象非空时,Thread对象将执行目标对象的run()方法。例如
Thread thread_odd = new Thread(odd,"奇数线程");
声明线程对象thread_odd的目标对象是odd,意味着,thread_odd线程执行odd的run()方法。
由于NumberThread是Thread的子类,声明非空的run()方法覆盖Thread类的run()方法,所以,NumberThread对象执行的是自己的run()方法,因此,不需要目标对象。
3.两种创建线程方式的比较
前两例分别使用两种方式创建线程,效果相同。那么,在实际编程中如何选用这两种方式呢?
说明如下:
(1) 继承线程Thread类
声明一个线程类继承Thread类,并且覆盖Thread类的run()方法,说明线程对象所执行的操作。这种方式的优点是,Thread类的子类对象就是线程对象,具有Thread类声明的方法,且具有线程体。缺点是,不适用于多重继承。
(2)实现Runnable接口
当一个类已继承一个父类,还要以线程方式运行时,就需要实现Runnable接口和Thread类。一个实现Runnable接口的对象本身不是线程对象,它作为一个线程对象的目标对象使用,因此,同时需要声明一个Thread线程对象。
发表评论
-
ThreadPoolExecutor线程池参数详解
2019-01-09 00:06 478参考:https://www.cnblogs.com/wayt ... -
解决线程同步问题的思路
2018-07-31 16:35 418线程同步机制 操作系统中实现线程同步有一种工 ... -
发送线程与接收线程 速率一致
2018-08-07 09:17 384package com.jbx.xiezuo; /* ... -
线程间的协作关系与线程同步
2018-07-30 16:21 5291.线程间的协作关系 当一个进程中的多个线程为完成同 ... -
带互斥锁的并发线程执行流程
2018-07-30 12:38 449... -
线程间的竞争关系与线程互斥
2018-07-30 11:19 672线程间的竞争关系与线 ... -
线程的同步机制
2018-07-17 11:31 385线程的同步机制 (一) ... -
3个线程,A,B,C,这三个线程分别只能打印 “a”,“b”,“c”,怎么让这三个线程依次打印“abc"
2018-07-17 11:19 351package com.jbx.thread; /* ... -
定时器与图形动画设计
2018-07-17 11:15 0动画(animation) 都是利用人眼的视 ... -
线程分类
2018-07-17 09:10 325线程分类: 线程可分为用户线程(user thread) ... -
线程优先级
2018-07-17 09:08 359Java提供10个等级的线程优先级,分别用1~10表示,优先级 ... -
设计滚动字演示线程状态及改变方法
2018-07-16 16:17 303本例演示线程对象的生 ... -
线程对象的生命周期
2018-07-16 11:28 361线程对象的生命周期 1.Thread.State类声明的线程状 ... -
声明继承Thread类的奇数/偶数序列线程
2018-07-10 23:58 419package com.jbx.com; /** ... -
Java的线程对象Runnable接口和Thread类
2018-07-10 21:42 400Java支持内置的多线程机制。 Java语言包中的Runnab ... -
并发程序设计
2018-07-09 17:22 275并发程序设计 1.顺序程 ... -
线程介绍
2018-07-09 16:55 298线程 1.引入线程机制的 ... -
进程介绍
2018-07-09 15:38 378进程 进程的定义和属性 进程是一个可并发执行的 ... -
多线程
2018-07-09 14:31 313...
相关推荐
声明自定义线程类实现Runnable接口实现奇数/偶数序列线程并发执行。
声明自定义线程类实现Runnable接口实现奇数/偶数序列线程并发执行。
在Java编程语言中,创建线程有两种主要方式:继承`Thread`类和实现`Runnable`接口。由于Java的单继承特性,当一个类需要继承其他类时,就不能再直接继承`Thread`,这时实现`Runnable`接口就成为创建线程的优选方案。...
Java提供了两种主要的方式来创建线程:继承Thread类和实现Runnable接口。本篇文章将深入探讨通过实现Runnable接口来创建线程的方法,以及这种方式相比于直接继承Thread类的优势。 首先,我们来看Runnable接口。在...
"Thread 线程类实现 Runnable 接口" Thread 线程类是 Java 中 Thread 和 Runnable 接口的实现,它提供了线程的基本操作和管理。下面是对 Thread 类的详细介绍: 1. Runnable 接口 Runnable 接口是 Thread 类的...
本文将详细讲解如何通过实现`Runnable`接口创建多线程,以及这种方式相较于继承`Thread`类的优势。 一、实现Runnable接口创建多线程 1. **步骤** 当一个类需要继承其他类而不能直接继承`Thread`类时,可以选择...
基于JAVA的多线程实现方法-实现Runnable接口 将需要实现多线程的类声明为实现Runnable接口的类,实现run()方法,并将线程体放在该方法里。
任何实现Runnable接口的类都可以被用来创建线程。 如何使用Runnable接口创建线程 使用Runnable接口创建线程的步骤如下: 1. 创建一个实现Runnable接口的类。 2. 在该类中重写run()方法,以便在线程中执行的操作。...
本文将深入探讨如何通过实现`Runnable`接口和继承`Thread`类两种方式来创建线程,并实现在屏幕上随机画正方形的程序。 首先,让我们了解线程的概念。线程是程序中的单一顺序控制流,一个进程可以包含多个线程,它们...
在Java中,线程可以通过Thread类或Runnable接口来实现。 Runnable接口是Java.lang包中的一部分,它定义了一个run()方法,该方法将被线程执行。Runnable接口的特点包括: * 只有一个run()方法 * 需要创建一个Thread...
在 Java 中,创建线程有两种方式:继承 Thread 类和实现 Runnable 接口。这些方式都可以用来创建线程,但它们之间有着一些关键的区别。 继承 Thread 类 继承 Thread 类是 Java 中创建线程的一种方式。这种方式下,...
本篇文章将深入探讨如何利用`Thread`类和`Runnable`接口来实现阶乘计算的多线程解决方案。阶乘计算是数学中的一个概念,对于非负整数n,其阶乘表示为所有小于等于n的正整数的乘积,记作n!。 首先,我们来看如何使用...
在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`类实现多线程 在Java中,可以通过...
大家都知道Runnable和Callable接口都可以作为其他线程执行的任务,但是Runnable接口的run方法没有返回值,而Callable接口的call方法有返回值,那么Callable接口是如何做到的呢?在此我给出一个Demo,看看通过...
相比之下,实现`Runnable`接口的方式更加灵活,适用于大多数情况,特别是当一个类已经继承了另一个类的情况下。 #### 六、线程死锁 线程死锁是指两个或多个线程在执行过程中因争夺资源而造成的一种互相等待的现象...
在Java编程语言中,创建多线程有两种主要的方法:继承`Thread`类和实现`Runnable`接口。这两种方法都是为了使程序能够同时执行多个任务,从而提高效率和响应性。 **1. 继承Thread类** 当一个类直接继承自`Thread`类...
起新线程需要new一个Thread对象,将实现Runnable接口的类作为Thread构造器参数。这样才能实现起新线程。 输出效果如下所示,main是一个线程、Runner 是另一个线程。 main Thread:------0 Runner Thread:------0 ...
1. 写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。 学习线程之间的通信协调关系。 2. 使用 runnable 接口实现按两... 使用继承Thread类方式和实现Runnable接口两种方式实现。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
2.2 实现Runnable接口 3. 实现Runnable接口: 3.1 实现步骤 3.2 优点与用途 4. 启动线程: 4.1 使用Thread类启动线程 4.2 使用Executor框架启动线程池 5. 传递参数给线程: 5.1 使用构造方法传递参数 5.2 使用类成员...