java 创建线程
一.继承Thread类
为创建一个线程,最简单的方法就是从Thread类继承。这个类包含了创建和运行线程所需的一切东西。Thread类最重要的方法是run(),但为了使用run(),必须对其进行重写。因此,run()属于那些会与程序中的其他线程“并发”或“同时”执行的代码。下面的例子是继承Thread类的一个简单实现。
java程序如下:
public class SimpleThread extends Thread { private int countDown = 5; private int threadNumber; private static int threadCount = 0; /**
* 为每个线程分配一个编号
*/
public SimpleThread() {
threadNumber = ++threadCount;
System.out.println("Making Thread" + threadNumber);
} /**
* 从5到1进行计数
*/
@Override
public void run() {
while (true) {
System.out.println("Thread" + threadNumber + ":" + countDown);
if (--countDown == 0) {
return;
}
}
} public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
new SimpleThread().start();
}
} }
执行结果如下:
Making Thread1
Making Thread2
Making Thread3
Making Thread4
Making Thread5
Thread3:5
Thread3:4
Thread3:3
Thread3:2
Thread1:5
Thread3:1
Thread1:4
Thread1:3
Thread1:2
Thread1:1
Thread4:5
Thread4:4
Thread4:3
Thread4:2
Thread5:5
Thread5:4
Thread5:3
Thread5:2
Thread5:1
Thread2:5
Thread2:4
Thread2:3
Thread2:2
Thread2:1
Thread4:1
在main()方法中,可看到创建并运行了大量线程。Thread包含了一个特殊的方法叫做start(),它的作用是对线程进行特殊的初始化,然后调用run()。如果不调用start(),线程便永远不会启动。
二.实现Runnable接口
在实际开发中,一个多线程的操作很少使用Thread类,而是通过Runnable接口完成。示例如下:
java代码如下:
public class SimpleThread implements Runnable { private int countDown = 10; /**
* 从10到1进行计数
*/
@Override
public void run() {
while (true) {
synchronized(this) {
if (countDown > 0) {
System.out.println(Thread.currentThread().getName() + ":" + countDown--);
} else {
return;
} try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
} public static void main(String[] args) {
SimpleThread sd = new SimpleThread();
for (int i = 0; i < 3; i++) {
new Thread(sd).start();
}
} }
执行结果如下:
Thread-0:10
Thread-2:9
Thread-2:8
Thread-1:7
Thread-2:6
Thread-2:5
Thread-2:4
Thread-2:3
Thread-2:2
Thread-2:1
两种实现方式的区别和联系:
在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:
- 避免点继承的局限,一个类可以继承多个接口。
- 适合于资源的共享
java 创建线程的更多相关文章
- -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中
本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait( ...
- 操作系统实现线程的几种模式 和 java创建线程的3个方式
操作系统实现线程的几种模式 和 java创建线程的3个方式 这是两个概念 在操作系统中,线程可以实现在用户模式下,也可以实现在内核模式下,也可以两者结合实现. 1.实现线程的三种方式: (1)继承t ...
- Java并发编程:Java创建线程的三种方式
目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...
- Java创建线程的三种主要方式
Java创建线程的主要方式 一.继承Thread类创建 通过继承Thread并且重写其run(),run方法中即线程执行任务.创建后的子类通过调用 start() 方法即可执行线程方法. 通过继承Th ...
- Java创建线程的四种方式
Java创建线程的四种方式 1.继承Thread类创建线程 定义Thread类的子类,并重写该类的run方法,run()方法的内容就是该线程执行的内容 创建Thread子类的实例,即创建了线程对象. ...
- 当阿里面试官问我:Java创建线程有几种方式?我就知道问题没那么简单
这是最新的大厂面试系列,还原真实场景,提炼出知识点分享给大家. 点赞再看,养成习惯~ 微信搜索[武哥聊编程],关注这个 Java 菜鸟. 昨天有个小伙伴去阿里面试实习生岗位,面试官问他了一个老生常谈的 ...
- java创建线程的多种方式
java创建线程的四种方式 1.继承 Thread 类 通过继承 Thread 类,并重写它的 run 方法,我们就可以创建一个线程. 首先定义一个类来继承 Thread 类,重写 run 方法. 然 ...
- Java创建线程的细节分析
转载:http://shmilyaw-hotmail-com.iteye.com/blog/1880902 前言 关于线程创建的问题,可以说是老生常谈了.在刚开始学习Thread的时候基本上都会接触到 ...
- java创建线程的三种方法
这里不会贴代码,只是将创建线程的三种方法做个笼统的介绍,再根据源码添加上自己的分析. 通过三种方法可以创建java线程: 1.继承Thread类. 2.实现Runnable接口. 3.实现Callab ...
- java创建线程
创建一个线程 Java提供了两种创建线程方法: 通过实现Runable接口: http://blog.csdn.net/duruiqi_fx/article/details/52187275 通过继承 ...
随机推荐
- swift:入门知识之协议与扩展
swift中使用protocol声明一个协议接口 swift中类.枚举和结构体都可以实现协议接口 swift中类中的方法都可以修改成员变量的值 swift中结构体中的方法默认是不能修改成员变量的,添加 ...
- ruby脚本,随机生成复杂密码
简单版本: base_char = (32..126).map{|i|i.chr} - ["'",'"'," ", "`",&qu ...
- Linux实用命令
0. 基本命令 1. 压缩 解压 tar -zcvf a.tar.gz a #把a压缩成a.tar.gz tar -zxvf a.tar.gz #把a.tar.gz解压成a 2. vim小结 2.1 ...
- Google 镜像站大集合
没有了google的日子是相当难受,下面推荐一些google的镜像站,感谢原文博主的无私奉献,同时也欢迎大家总结科研上的小技巧,心得等来本平台投稿,好东西当然要拿出来共同分享! 以下镜像站分原版和非原 ...
- PostgreSQL删除表
PostgreSQL的DROP TABLE语句是用来删除表定义及其所有相关的数据表的索引,规则,触发器和约束. 必须使用此命令时要小心,因为一旦一个表被删除表中提供的所有信息也将被永远失去了. 语法: ...
- 通过两个GPS计算两个GPS点的距离
public static double GetDistance(double lat1, double lng1, double lat2, double lng2) { double radLat ...
- Codeforces Round #209 (Div. 2)C
刷了一页的WA ..终于发现了 哪里错了 快速幂模板里一个变量t居然开得long ... 虽然代码写的丑了点 但是是对的 那个该死的long 啊.. #include <iostream&g ...
- 使用jQuery插件PrintArea进行html页面打印
在开发系统时,我们一般会有统计分析的功能需求,而现在大多数系统都是使用B/S的形式开发. 所以,html报表打印,并且打印指定内容,成了必要的功能. 开源地址:https://github.com/R ...
- the specified child alread has a parent
用 TestFragment extends Fragment @Override public View onCreateView(LayoutInflater inflat ...
- XE4 IOS开发环境配置
l 配置IOS的安装开发环境 使用RAD XE4开发IOS程序,一台MAC是必须的(也可以用虚拟机), MAC上需要安装Xcode, 独立版本的Commnand Line Tools 以及RAD的pa ...