Java中线程创建的两种方法,扩展Thread类和实现Runnable接口

方法一:扩展Thread类。

使用扩展Thread类的方式创建并执行一个线程,需要执行下面四个步骤;

(1)扩展java.lang.Thread类

(2)用希望的执行代码来实现run()方法

(3)通过new关键字创建该类的一个新对象(即一个线程)

(4) 通过star()方法启动线程。

程序一:通过继承线程创建举例

package lyx;

public class myThread extends Thread {
	int count =1,number;
    public myThread(int num) {
    	number=num;
    	System.out.println("创建线程"+number);
    }
    public void run() {
    	while(true) {
    		System.out.println("线程"+number+":计数"+count);
    		if(++count==5)
    			return;
    	}
    }
    public static void main(String args[]) {
    	for(int i=0;i<10;++i) {
    		myThread tt=new myThread(i+1);
    		tt.start();
    	}
    }
}

程序运行结果如下,从左向右

程序二:包含yield()方法,此时程序运行代码

public class myThread extends Thread {
	int count =1,number;
    public myThread(int num) {
    	number=num;
    	System.out.println("创建线程"+number);
    }
    public void run() {
    	while(true) {
    		System.out.println("线程"+number+":计数"+count);
    		if(++count==5)
    			return;
    	}
    }
    public static void main(String args[]) {
    	for(int i=0;i<10;++i) {
    		myThread tt=new myThread(i+1);
    		tt.start();
    		Thread.yield();
    	}
    }
}

 程序运行结果

该程序重新改写的地方只有一处,在ma in(的主循环中添加了一个yield()命令。不过经改动后,系统会为每个线程分配时间片,一个 线程运行完后会自动释放CPU然后转入下一个 线程的运行。但需要注意,即使使用yield()方法,也不能保证正在运行的线程利用此方法而得到较佳的调度,因为有可能在未运行到yield()方法之前,分配给该线程的CPU时间片已用完而被切换到其他线程。 

方法二:实现Runnabele接口

利用Runnable借口创见和运行线程的编程步骤为:

(1)定义一个Runnable接口的实现

(2)用希望的执行代码来实现run()方法

(3)创建一个Thread类的对象,即创建一个新线程,并用Runnable接口或者Thread类的引用变量指向它,调用Thread类带Runnable引用作为形参的构造方法。

yourThread yourt=new yourThread;

Thread tt=new Thread(yourt)

 (4) 通过star()方法启动线程。

程序三:通过Runnable接口创建线程举例。

public class my_ImplementsRunnableThread implements Runnable{ 
	int count =1,number;
    public my_ImplementsRunnableThread (int num) {
    	number=num;
    	System.out.println("创建线程"+number);
    }
    public void run() {
    	while(true) {
    		System.out.println("线程"+number+":计数"+count);
    		if(++count==5)
    			return;
    	}
    }
    public static void main(String args[]) {
    	for(int i=0;i<5;++i) {
    		my_ImplementsRunnableThread yourt=new my_ImplementsRunnableThread(i+1);
    		Thread tt=new Thread(yourt);
    		tt.start();
    		
    	}
    }

}

程序运行结果如下

 

 包含yield()方法,此时程序运行代码

public class my_ImplementsRunnableThread implements Runnable{ 
	int count =1,number;
    public my_ImplementsRunnableThread (int num) {
    	number=num;
    	System.out.println("创建线程"+number);
    }
    public void run() {
    	while(true) {
    		System.out.println("线程"+number+":计数"+count);
    		if(++count==5)
    			return;
    	}
    }
    public static void main(String args[]) {
    	for(int i=0;i<5;++i) {
    		my_ImplementsRunnableThread yourt=new my_ImplementsRunnableThread(i+1);
    		Thread tt=new Thread(yourt);
    		tt.start();
    		Thread.yield();
    		
    	}
    }

}

运行结果: 

 

 

 

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
无论是工作学习,不断的总结是必不可少的。只有不断的总结,发现问题,弥补不足,才能长久的进步!!Java学习更是如此,知识点总结目录如下: 目录 一、 Java概述 3 二、 Java语法基础 5 数据型 5 运算符号 14 语句 15 函数 15 方法重载(Overloadjing)与重写(Overriding) 16 数组 17 总结 18 三、 常见关键字 20 四、 面向对象★★★★★ 21 五、 封装(面向对象特征之一)★★★★ 23 六、 继承(面向对象特征之一)★★★★ 25 七、 接口(面向对象特征之一)★★★★ 28 八、 多态(面向对象特征之一)★★★★ 30 九、 java.lang.Object 31 十、 异常★★★★ 34 十一、 包(package) 37 十二、 多线程★★★★ 39 为什么要使用多线程 39 创建线程和启动 39 线程的生命周期 44 线程管理 45 线程同步 49 线程通信 52 线程池 58 死锁 64 线程相关 65 十三、 同步★★★★★ 67 十四、 Lock接口 70 十五、 API 71 String字符串:★★★☆ 71 StringBuffer字符串缓冲区:★★★☆ 73 StringBuilder字符串缓冲区:★★★☆ 74 基本数据型对象包装★★★☆ 75 集合框架:★★★★★,用于存储数据的容器。 76 Collection接口 77 Iterator接口 78 List接口 78 Set接口 80 Map接口 81 把map集合转成set的方法 82 使用集合的技巧 83 Collections--集合工具 83 Arrays—数组对象工具 84 增强for循环 85 可变参数(...) 86 枚举:关键字 enum 86 自动拆装箱 86 泛型 87 System 89 Runtime 90 Math 90 .Date:日期,月份从0—11 92 Calendar:日历 93 十六、 IO流:用于处理设备上数据 ★★★★★ 94 IO流的概念 95 字符流与字节流 98 流对象 101 File 102 Java.util.Properties 103 介绍IO包扩展功能的流对象 103 十七、 网络编程 110 网络基础之网络协议篇 111 UDP传输 124 TCP传输 126 十八、 反射技术 127 十九、 Ajax原理及实现步骤★★★★★ 130 Ajax概述 130 Ajax工作原理 130 Ajax实现步骤 130 详解区分请求型: GET或POST 131 $.ajax标准写法 134 二十、 正则表达式:其实是用来操作字符串的一些规则★★★☆ 135 二十一、 设计模式★★★★★ 136 设计模式简介 136 单例设计模式:★★★★★ 156 工厂模式★★★★★ 159 抽象工厂模式★★★★★ 163 建造者模式 170 原型模式 177 适配器模式 182 桥接模式 188 过滤器模式 192 组合模式 193 装饰器模式★★★★★ 196 外观模式 201 享元模式 204 代理模式★★★★★ 208 责任链模式 212 命令模式 216 解释器模式 219 迭代器模式 222 介者模式 224 备忘录模式 226 观察者模式 230 状态模式 233 空对象模式 236 策略模式★★★★★ 238 模板模式 240 访问者模式 244 设计模式总结★★★★★ 247 二十二、 Java其他总结 248 Java JVM知识点总结 248 equals()方法和hashCode()方法 270 数据结构 273 Array方法汇总 304 Java数组与集合小结 305 递归 309 对象的序列化 310 Java两种线程ThreadRunnable 315 Java锁小结 321 java.util.concurrent.locks包下常用的 326 NIO(New IO) 327 volatile详解 337 Java 8新特性 347 Java 性能优化 362

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘小小@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值