java开启新线程的三种方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。
方式1:继承Thread类
步骤:
1):定义一个类A继承于Java.lang.Thread类.
2):在A类中覆盖Thread类中的run方法.
3):我们在run方法中编写需要执行的操作:run方法里的代码,线程执行体.
4):在main方法(线程)中,创建线程对象,并启动线程.
(1)创建线程类对象:
A类 a = new A类();
(2)调用线程对象的start方法:
a.start();//启动一个线程
注意:千万不要调用run方法,如果调用run方法好比是对象调用方法,依然还是只有一个线程,并没有开启新的线程.
线程只能启动一次!
创建启动线程实例:
- //1):定义一个类A继承于java.lang.Thread类.
- class MusicThread extends Thread{
- //2):在A类中覆盖Thread类中的run方法.
- public void run() {
- //3):在run方法中编写需要执行的操作
- for(int i = 0; i < 50; i ++){
- System.out.println("播放音乐"+i);
- }
- }
- }
- public class ExtendsThreadDemo {
- public static void main(String[] args) {
- for(int j = 0; j < 50; j ++){
- System.out.println("运行游戏"+j);
- if(j == 10){
- //4):在main方法(线程)中,创建线程对象,并启动线程.
- MusicThread music = new MusicThread();
- music.start();
- }
- }
- }
- }
方式2:实现Runnable接口
步骤:
1):定义一个类A实现于java.lang.Runnable接口,注意A类不是线程类.
2):在A类中覆盖Runnable接口中的run方法.
3):我们在run方法中编写需要执行的操作:run方法里的,线程执行体.
4):在main方法(线程)中,创建线程对象,并启动线程.
(1)创建线程类对象:
Thread t = new Thread(new A());
(2)调用线程对象的start方法:
t.start();
- //1):定义一个类A实现于java.lang.Runnable接口,注意A类不是线程类.
- class MusicImplements implements Runnable{
- //2):在A类中覆盖Runnable接口中的run方法.
- public void run() {
- //3):在run方法中编写需要执行的操作
- for(int i = 0; i < 50; i ++){
- System.out.println("播放音乐"+i);
- }
- }
- }
- public class ImplementsRunnableDemo {
- public static void main(String[] args) {
- for(int j = 0; j < 50; j ++){
- System.out.println("运行游戏"+j);
- if(j == 10){
- //4):在main方法(线程)中,创建线程对象,并启动线程
- MusicImplements mi = new MusicImplements();
- Thread t = new Thread(mi);
- t.start();
- }
- }
- }
- }
分析继承方式和实现方式的区别:
继承方式:
1):从设计上分析,Java中类是单继承的,如果继承了Thread了,该类就不能再有其他的直接父类了.
2):从操作上分析,继承方式更简单,获取线程名字也简单.(操作上,更简单)
3):从多线程共享同一个资源上分析,继承方式不能做到.
实现方式:
1):从设计上分析,Java中类可以多实现接口,此时该类还可以继承其他类,并且还可以实现其他接口,设计更为合理.
2):从操作上分析,实现方式稍微复杂点,获取线程名字也比较复杂,得使用Thread.currentThread()来获取当前线程的引用.
3):从多线程共享同一个资源上分析,实现方式可以做到(是否共享同一个资源).
补充:实现方式获取线程名字:
String name = Thread.currentThread().getName();
方式3:直接在函数体使用(匿名内部类,其实也是属于第二种实现方式的特例。)
- void java_thread()
- {
- Thread t = new Thread(new Runnable(){
- public void run(){
- // run方法具体重写
- mSoundPoolMap.put(index, mSoundPool.load(filePath, index));
- getThis().LoadMediaComplete();
- }});
- t.start();
- }
java开启新线程的三种方法相关推荐
- JAVA中创建线程的三种方法及比较
JAVA中创建线程的方式有三种,各有优缺点,具体如下: 目录 一.继承Thread类来创建线程 二.实现Runnable接口来创建线程 三.通过Callable和Future来创建线程 四.三种方式创 ...
- java 终止方法_Java中终止线程的三种方法
Java中终止线程的三种方法 Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经 ...
- Java创建线程的三种方法
这里不会贴代码,只是将创建线程的三种方法做个笼统的介绍,再根据源码添加上自己的分析. 通过三种方法可以创建java线程: 1.继承Thread类. 2.实现Runnable接口. 3.实现Callab ...
- Java 创建线程的三种方法比较
在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述Java 创建线程的三种方法比较, 更多Java专业知识,广州疯狂jav ...
- Java 创建一个线程的三种方式
Java 创建一个线程的三种方式 更多内容,点击了解: https://how2j.cn/k/thread/thread-start/353.html 创建多线程有3种方式,分别是继承线程类,实现Ru ...
- java 获取当前时间的三种方法是什么
本文主要介绍java获取当前时间的三种方法.这篇文章很详细,有一定的参考价值.有需要的朋友可以参考一下. 总结一些java中获取当前时间的方法. System.currentTimeMillis() ...
- Java实现九九乘法表(三种方法实现)
Java实现九九乘法表(三种方法实现) 题目要求: /*输出以下九九乘法表 1 * 1 = 1 2 * 1 = 2 2 * 2 = 4 ......*/ 代码实现一(使用两层for循环--最常用): ...
- linux启动进程 c,Linux启动新进程的三种方法
程序中,我们有时需要启动一个新的进程,来完成其他的工作. 下面介绍了三种实现方法,以及这三种方法之间的区别. 1.system函数-调用shell进程,开启新进程 system函数,是通过启动shel ...
- java 获取随机数字的三种方法
1 //方法1 (数据类型) 2 //(最小值+Math.random()*(最大值-最小值+1)) 3 // 例: 4 (int)(1+Math.random()*(10-1+1)) //从1到10 ...
最新文章
- 那些容易忽略的事(1) -变量与运算符+
- python常用库 自动化办公类 —— PyPDF2(处理pdf文件)
- 前端学习(1363):学生档案信息管理5
- 一文搞懂 PyTorch 内部机制
- Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例...
- 《淘宝网开店 SEO 推广 营销 爆款 实战200招》——1.3 网上开店的热门行业有哪些...
- 转载:XPath基本语法
- 使用反射创建实例/对象的两种方法
- Apache POI简单入门
- 事件发生位置的相对性——思想实验推导狭义相对论(二)
- 悲剧!广电总局12月11日将封闭的网站目录!!!
- ECSHOP V2.7.3文件目录结构
- tkinter尤克里里爬格子练习器
- 数仓理论知识之什么是度量,什么是粒度,什么是事实,什么是维度
- Python笔记之通过PyWin32模块实现在QQ聊天窗口自动发送消息
- 关于K8s中资源配置范围管理(LimitRange)的一些笔记
- 探究Bitmap在Android中的内存占用
- 《机器人爱好者(第1辑)》——机器人领域新动态
- 移动云迁移工具:Xen虚拟化迁移到移动云
- 史上最全的Android面试题集锦
热门文章
- REVERSE-PRACTICE-CTFSHOW-6
- REVERSE-PRACTICE-BUUCTF-7
- java中sql之count_按SQL Server中的count()子句分组
- docker安装与学习
- 【PAT - 甲级1003】Emergency (25分)(Dijkstra,最短路条数,双权值最短路)
- 【CodeForces - 675C】Money Transfers(思维,前缀和)
- 【qduoj - 312】寻找唯一的萌妹(卡时)
- 递归Java_递归的Java实现
- C++ 多态和虚函数
- leetcode607. 销售员(SQL)