Java多线程编程之Runnable、Thread简介
来源:互联网 发布:小黑屋老版写作软件 编辑:程序博客网 时间:2024/05/20 18:18
在Java多线程编程中,常会遇到Runnable,Thread,Handler,这些对象往往让人感到困惑,现简单梳理下Java多线程编程的要点以及它们使用的区别。
一、描述任务的方式,Runnable接口
并发编程将程序分为多个任务,通过使用多线程机制来执行每个独立任务(子任务)。下面写个简单的程序说明Runnable使用的特点。
LiftOff.java
package com.bing.test;public class LiftOff implements Runnable{protected int countDown = 10;private static int taskCount = 0;private final int id = taskCount++;public LiftOff(){}public LiftOff(int countDowm) {this.countDown = countDowm;}public String status(){return "#" + id + "(" + (countDown > 0 ? countDown : "liftOff!") + "). ";}@Overridepublic void run() {while(countDown-- >0){System.out.println(status());Thread.yield();}}}main直接调用LiftOff
public static void main(String[] args) {LiftOff launch = new LiftOff();launch.run();}输出如下:
#0(9).
#0(8).
#0(7).
#0(6).
#0(5).
#0(4).
#0(3).
#0(2).
#0(1).
#0(liftOff!).
当然,该示例只是执行了一个任务。而要实现线程行为,必须将一个任务附着到线程上。
二、多线程实现,Thread类
通过Thread构造器的start()方法,可以将Runnable对象对应的任务添加到新线程上。
public static void main(String[] args) {Thread t = new Thread(new LiftOff());t.start();System.out.println("wait for liftoff.");}输出如下:
wait for liftoff.
#0(9).
......
#0(1).
#0(liftOff!).
该过程分为两步:
1、Thread构造器实例化一个Runnable对象(LiftOff),并调用start()方法启动线程,执行初始化操作;
2、在新的线程中(即LiftOff任务)run()方法被调用,执行新任务。
这便是Java多线程编程的简单逻辑,有了这个基础,理解复杂的东西会容易多了!
参考自《think in Java》
0 0
- Java多线程编程之Runnable、Thread简介
- JAVA多线程之Thread&&Runnable
- Java多线程编程之Thread和Runnable的区别
- Java多线程之 Thread VS Runnable
- JAVA多线程之Thread VS Runnable
- Java多线程 之 Runnable Thread (一)
- JAVA多线程之Runnable和Thread比较
- JAVA多线程之Runnable和Thread比较
- JAVA多线程:Thread、Runnable
- 多线程二,Java多线程thread和runnable区别简介
- 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)
- 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)
- 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)
- 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)
- 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)(r)
- 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)
- Java 并发编程之Runnable和Thread实现多线程的区别
- 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)
- LBP算子总结-需后期补充
- EasyUI combotree树形下拉框--判断树形下拉框对象是否为空
- spring事务定义中,@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED) 这样定义有问题吗?
- 内置的进制转换的方法---小笔记
- ARM Uboot详解
- Java多线程编程之Runnable、Thread简介
- 123. Best Time to Buy and Sell Stock III
- Codeforces Round #313 (Div. 2) C. Geralds Hexagon (六边形最多划分多少个正三角形)
- HLS直播技术方案及踩过的坑
- Spring_Transactional_Propagation
- JPA学习笔记(2)——创建JPA项目
- Android ViewDragHelper完全解析 自定义ViewGroup神器
- IO流学习笔记1——File类
- uva 11134 - Fabled Rooks 优先队列 + 贪心