【多线程学习(1)】创建java多线程
1)java多线程的创建方式有三种:
1.继承Thread类
2.实现Runnable接口
3.实现Callable接口
第一种:
//继承Thread类
class ExtendsThread extends Thread{
public void run(){
//do your stuff
}
}
ExtendsThread e = new ExtendsThread();
e.start();
第二种:
//实现Runnable接口
class ImpleRunnableThread implements Runnable{
@Override
public void run() {
//do your stuff
}
}
ImpleRunnableThread ir = new ImpleRunnableThread();
Thread t = new Thread(ir);
t.start();
第三种是jdk1.5以后提供的:
//实现Callable接口
class ImpleCallableThread implements Callable{
@Override
public Object call() throws Exception {
// TODO do you stuff
return null;
}
}
ImpleCallableThread ic = new ImpleCallableThread();
FutureTask<String> task = new FutureTask<String>(ic);
new Thread(task,"有返回值的线程").start();
2)可以看到线程启动用的是start这个方法,为什么呢?打开start()源码可以看到,在Thread类里start()调用了 private native void start0();native关键字表示调动的是操作系统的底层函数,这样的技术成为JNI(Java Native Interface)。
3)看看线程的执行顺序情况:
for(int i =0;i<5;i++){
Thread thread = new Thread(""+i){
public void run() {
System.out.println("run...."+ getName());
}
};
thread.start();
}
output:

虽然启动线程的顺序是有序的,但是执行线程的顺序并非是有序的,因为线程是并行执行而非顺序的,它的执行顺序由JVM和操作系统一起决定。
4)如果同时使用继承Thread类、Runnable接口这两种的话,执行的是哪个run方法呢?
new Thread(new Runnable(){
@Override
public void run() {
// do your stuff 1
}
}){
public void run(){
//do your stuff 2
}
};
以上代码相当于new Thread(new Runnable(){run()}){run()},由于Thread类本身实现了Runnable接口,所以如果自身重写了run方法的话,那么就会覆盖父类的方法,所以会执行第二个run方法。
下一篇说明这三种创建方式的区别。
【多线程学习(1)】创建java多线程的更多相关文章
- 学习笔记之JAVA多线程
Java程序设计实用教程 by 朱战立 & 沈伟 孙鑫Java无难事 Java 多线程与并发编程专题(http://www.ibm.com/developerworks/cn/java/j-c ...
- Java多线程编程核心技术(一)Java多线程技能
1.进程和线程 一个程序就是一个进程,而一个程序中的多个任务则被称为线程. 进程是表示资源分配的基本单位,线程是进程中执行运算的最小单位,亦是调度运行的基本单位. 举个例子: 打开你的计算机上的任务管 ...
- Java多线程学习笔记——从Java JVM对多线程数据同步的一些理解
我们知道在多线程编程中,我们很大的一部分内容是为了解决线程间的资源同步问题和线程间共同协作解决问题.线程间的同步,通俗我们理解为僧多粥少,在粥有限情况下,我们怎么去防止大家有秩序的喝到粥,不至于 ...
- 学习笔记《Java多线程编程实战指南》二
2.1线程属性 属性 属性类型及用途 只读属性 注意事项 编号(id) long型,标识不同线程 是 不适合用作唯一标识 名称(name) String型,区分不同线程 否 设置名称有助于 ...
- 学习笔记《Java多线程编程实战指南》一
1.1什么是多线程编程 多线程编程就是以线程为基本抽象单位的一种编程范式,和面向对象编程是可以相容的,事实上Java平台中的一个线程就是一个对象.多线程编程不是线程越多越好,就像“和尚挑水”的故事一样 ...
- Java多线程学习(一)---并发与多线程
Java并发与多线程 摘要: 1. 并发与并行的区别,何为并发编程,并发编程的优势在哪 2. 多线程.多任务.多进程机制概述 3. 多线程.多任务.多进程机制与编程思想的关系 一.并发 1.1 并发与 ...
- 创建Java多线程的两种方式和线程异常
一.使用多线程的两种方法 使用多线程的两种方法有:继承Thread类和实现runable接口. 二.继承Thread类 来看一下thread类的源代码: class Thread implement ...
- Qt多线程学习:创建多线程
[为什么要用多线程?] 传统的图形用户界面应用程序都仅仅有一个运行线程,而且一次仅仅运行一个操作.假设用户从用户界面中调用一个比較耗时的操作,当该操作正在运行时,用户界面一般会冻结而不再响应.这个问题 ...
- 学习笔记《Java多线程编程实战指南》三
3.1串行.并发与并行 1.串行:一件事做完接着做下一件事. 2.并发:几件事情交替进行,统筹资源. 3.并行:几件事情同时进行,齐头并进,各自运行直到结束. 多线程编程的实质就是将任务处理方式由串行 ...
随机推荐
- redis 有序集合类型
- 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 答:接口可以继承接口.抽象类可以实现(implements)接口,抽象类 ...
- ios xmppFramework框架的导入步骤和介绍
一个将要开发xmpp的项目,建议在项目刚创建就导入框架,这样可以避免一些自己操作失误造成不必要的损失. xmpp中最常用的框架就是 xmppFrameWork 第一种方法直接拖 1> 拖入文件夹 ...
- iOS面试题总结(持续更新)
过段时间打算跳槽,找了一些面试题来做,在这里做个总结方便review,希望能对要面试的童鞋有帮助. 以下为面试题: 运行以下代码会有什么结果 NSString *str1 = @"str1& ...
- forEach、for...in、for...of
forEach 数组实例的遍历方法 const arr=['red', 'green', 'blue']; arr.forEach(function(element, index) { console ...
- MySQL另类的备份恢复方法——innodb可传输表空间
Preface There're many ways in backing up or migrating data from one server to another one.Lo ...
- jquery横向手风琴效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- scrapy--json(喜马拉雅Fm)
已经开始听喜马拉雅Fm电台有2个月,听里面的故事,感觉能听到自己,特别是蕊希电台,始于声音,陷于故事,忠于总结.感谢喜马拉雅Fm陪我度过了这2个月,应该是太爱了,然后就开始对Fm下手了.QAQ 该博客 ...
- 呕心沥血写的python猜数字
#猜数字 import random num_rd=random.randint(0,100) count=1 while 1<=count<=10: num_ip=input('请输入0 ...
- GDOI--DAY2 游记
今天,熬夜不够多,果然,不出所料,爆零了... 第一题,看到数据之大,懵逼了,于是,敲了个二分SPFA,但是!最大的点GG了,呜呜~~~~(>_<)~~~~ ,于是,就不继续做第一题了(虽 ...