博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Thread类
阅读量:5219 次
发布时间:2019-06-14

本文共 1914 字,大约阅读时间需要 6 分钟。

Thread类是在java.lang包中定义的,一个类只要继承了Thread类,此类就称为多线程操作类,Thread子类中,必须明确地覆写Thread类中的run()方法,此方法为线程的主体

【多线程的定义语法】

class  类名称  extends  Thread{

属性...;

方法...;

public void run{  //覆写Thread类中的run()方法,此方法是线程的主体

线程主体;

     }

}

范例:继承Thread类实现多线程

package ThreadDemo01;class MyThread extends Thread {	private String name;	public MyThread(String name) {		this.name = name;	}	public void run() {		for (int i = 0; i < 10; i++) {			System.out.println(name + "运行,i=" + i);		}	}};public class ThreradDemo01 {	public static void main(String[] args) {		MyThread mt1 = new MyThread("线程A");		MyThread mt2 = new MyThread("线程B");		mt1.run();		mt2.run();	}};

  结果:

线程A运行,i=0

线程A运行,i=1
线程A运行,i=2
线程A运行,i=3
线程A运行,i=4
线程A运行,i=5
线程A运行,i=6
线程A运行,i=7
线程A运行,i=8
线程A运行,i=9
线程B运行,i=0
线程B运行,i=1
线程B运行,i=2
线程B运行,i=3
线程B运行,i=4
线程B运行,i=5
线程B运行,i=6
线程B运行,i=7
线程B运行,i=8
线程B运行,i=9

 

这样并没有启动线程,

如果要正确启动线程,是不能直接调用run()方法的,而应该从Thread类中继承而来的start()方法代码如下:

范例:启动线程

package ThreadDemo01;class MyThread extends Thread {	private String name;	public MyThread(String name) {		this.name = name;	}	public void run() {		for (int i = 0; i < 10; i++) {			System.out.println(name + "运行,i=" + i);		}	}}public class ThreradDemo01 {	public static void main(String args[]) {		MyThread mt1 = new MyThread("线程A");		MyThread mt2 = new MyThread("线程B");		mt1.start();		mt2.start();	}}

  结果:

线程A运行,i=0

线程A运行,i=1
线程A运行,i=2
线程A运行,i=3
线程A运行,i=4
线程A运行,i=5
线程A运行,i=6
线程A运行,i=7
线程A运行,i=8
线程A运行,i=9
线程B运行,i=0
线程B运行,i=1
线程B运行,i=2
线程B运行,i=3
线程B运行,i=4
线程B运行,i=5
线程B运行,i=6
线程B运行,i=7
线程B运行,i=8
线程B运行,i=9

再次运行:

线程A运行,i=0

线程B运行,i=0
线程B运行,i=1
线程B运行,i=2
线程B运行,i=3
线程B运行,i=4
线程B运行,i=5
线程B运行,i=6
线程B运行,i=7
线程B运行,i=8
线程B运行,i=9
线程A运行,i=1
线程A运行,i=2
线程A运行,i=3
线程A运行,i=4
线程A运行,i=5
线程A运行,i=6
线程A运行,i=7
线程A运行,i=8
线程A运行,i=9

从结果上看两个程序是交错运行的,那个线程抢到了CPU那个就可以运行,线程虽然调用的是start()方法,但实际上调用run()方法主体。

如果一个类只能继承Thread类才能事项多线程,则必定会受到单继承局限的影响,所以一般会使用Runnable接口完成

转载于:https://www.cnblogs.com/bokun-wang/archive/2011/12/08/2281133.html

你可能感兴趣的文章
递归-下楼梯
查看>>
实用的VMware虚拟机使用技巧十一例
查看>>
监控工具之---Prometheus 安装详解(三)
查看>>
不错的MVC文章
查看>>
网络管理相关函数
查看>>
IOS Google语音识别更新啦!!!
查看>>
20190422 T-SQL 触发器
查看>>
[置顶] Linux终端中使用上一命令减少键盘输入
查看>>
poj1422_有向图最小路径覆盖数
查看>>
BootScrap
查看>>
[大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化
查看>>
WEB_点击一百万次
查看>>
CodeForces - 878A Short Program(位运算)
查看>>
路冉的JavaScript学习笔记-2015年1月23日
查看>>
Mysql出现(10061)错误提示的暴力解决办法
查看>>
2018-2019-2 网络对抗技术 20165202 Exp3 免杀原理与实践
查看>>
NPM慢怎么办 - nrm切换资源镜像
查看>>
CoreData 从入门到精通(四)并发操作
查看>>
Swift - UIView的常用属性和常用方法总结
查看>>
Swift - 异步加载各网站的favicon图标,并在单元格中显示
查看>>