java开启新线程的三种⽅法
⽅式1:继承Thread类
步骤:
1):定义⼀个类A继承于.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();
}
}java多线程入门
}
}
⽅式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();
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。