Java线程——两种创建线程的方式
来源:互联网 发布:flex java 做什么的 编辑:程序博客网 时间:2024/05/22 12:36
第一种方式:继承Thread类并重写run()方法来创建线程
/* * 继承Thread类并重写run()方法来创建线程 * 程序启动时总是会自动的调用main()方法执行主线程,因此mian()是创建和启动线程的地方。首先创建了t1、t2、t3三个线程并传入了相应的参数 * 程序运行到t1.start();启动线程病并自动调用run()方法,在run()方法中,sleep(200)这个方法使t1线程暂停200毫秒,之后线程才可以恢复运行 * 在t1线程休眠的时间里,把执行权主动的交给了t2,而不是等t1恢复运行后再让t2运行,所以才会打印出上面的运行结果 * */package com.js.thread;public class TextDemo {public static void main(String[] args){ThreadSubName t1 = new ThreadSubName("Thread 1", 200);ThreadSubName t2 = new ThreadSubName("Thread 2", 100);ThreadSubName t3 = new ThreadSubName("Thread 3", 300);t1.start();t2.start();t3.start(); }}class ThreadSubName extends Thread{private String threadName;private int Ms;public ThreadSubName(String name,int Ms){this.threadName=name;this.Ms=Ms;}public void run(){try {sleep(Ms);} catch (InterruptedException e) {System.out.println("The Thread is Wrong");e.printStackTrace();}System.out.println(" 名字叫:"+threadName+"开始休眠"+Ms+"毫秒");}}
第二种方式:实现Runnable并重写run()方法来创建线程
/* * 实现Runnnable接口并重写run()方法来创建线程 * 因为java是单继承 * 这段代码首先说明了用Runnable接口创建线程是可以解决类多继承这个难点的。因为RunnableDemo这个类不仅实现了Runnable接口,同时也继承了ThreadRun类 * 在创建线程对象时要注意,RunnableDemo r1 = new RunnableDemo();虽然RunnableDemo是Runnable的子类,但是r1并不是线程对象 * Thread t1 = new Thread(r1,"第一线程");这才得到一个线程对象 * 创建真正的线程对象时必须用带有Runnable参数的Thread类创建的对象 * public Thread(Runnable target); * public Thread(ThreadGroup group,Runnable target); * public Thread(Runnable target,String name); * public Thread(ThreadGroup group,Runnable target,String name); * 当创建了好几个线程的时候,很多线程的工作任务是类似或者一致的,这样我们就可以使用ThreadGroup来管理他 * 们,ThreadGroup可以随时的获取在他里面的线程的运行状态,信息,或者一条命令关闭掉这个group里面的所有 * 线程,非常的简单实用 */package com.js.thread;public class TextDemo_1 { public static void main(String[] args){ RunnableDemo r1 = new RunnableDemo(); r1.RDemo(r1); System.out.println(r1.print()); }}class ThreadRun{public String print(){return "我是RunnableDemo的父类";}}class RunnableDemo extends ThreadRun implements Runnable{Thread t2 = null;public void RDemo(RunnableDemo r1){Thread t1 = new Thread(r1,"第一线程");System.out.println("正在运行的是:"+t1);t2 = new Thread(r1,"第二线程");System.out.println("创建第二线程");System.out.println("第一线程开始休眠");t2.start();try {t1.sleep(400);} catch (InterruptedException e) {System.out.println("第一线程错误");}System.out.println("第一线程恢复运行");}public void run(){try {for(int i=0;i<800;i+=100){System.out.println("第二线程的休眠时间:"+i);t2.sleep(i);}} catch (InterruptedException e) {System.out.println("第二线程错误");}System.out.println("第二线程结束");}}
0 0
- Java线程——两种创建线程的方式
- Java——线程创建两种方式的对比
- Java——创建线程的两种方式
- java 创建线程 的两种方式
- Java线程创建的两种方式
- java创建线程的两种方式
- java创建线程的两种方式
- java线程的两种创建方式
- Java创建线程的两种方式
- java线程创建的两种方式
- Java创建线程的两种方式
- JAVA创建线程的两种方式
- Java线程创建的两种方式
- java创建线程的两种方式
- Java线程第三课:线程的两种创建方式
- 【java线程】创建线程的两种方式
- 黑马程序员——java创建线程的两种创建方式
- 黑马程序员——java基础——Java中创建线程的两种方式
- 动态规划:凑硬币(中级:动态规划思想体会)
- 业务模型;UML类图;数据模型;概念模型;面向对象模型
- Practice6_3_map_sort_by_compareStu
- 快速排序算法(C++实现)
- 远程服务器上nginx安转与基本操作(ip反向代理转发)
- Java线程——两种创建线程的方式
- listen EADDRINUSE 127.0.0.1:3000
- Median of Two Sorted Arrays
- 局域网中抓到NBNS数据包
- 《剑指Offer》替换空格(将字符串中的空格替换为%20)
- mysql 性能-数据类型篇
- uri 与url的区别
- [机器学习] 第一课01笔记
- 类与包