一、关于多线程的理解
多线程使得多种事务同时进行能够实现,在电脑上同时可以听歌浏览网页,还能挂着qq,就可以理解为多线程。
二、Thread类和Runnable接口
1.导包
import java.lang.Thread;
import java.lang.Runnable;
因为lang包都不用导,想用的时候直接用就可以了。
2.怎么创建、启动、结束线程
创建
方法一、创建一个类继承Thread类就可以直接创建Thread对象了。 要记得重写run方法,run方法里的代码就是线程执行的内容,比如说播放音乐。 Thread1创建完,要记得实例化,并调用start()方法,这个线程才能跑起来,就比如说你写了个播放线程,但是你没有按下播放键,所以看起来就是写了没什么用,并没有实现一边刷网页一边播放音乐的效果。
class Thread1 extends Thread{
public void run(){
……
for(int i = 0;i < music.size();i++){
播放music(i);
try{
sleep(500);
}catch(InterruptedException e){
}
}
}
}
public class TestThread1{
public static void main(String args[]){
Thread1 t1 = new Thread1();
t1.start();
}
}
sleep(500);就是每播放1首歌暂停500毫秒,也就是每次for循环,除了播放一首歌还要睡眠500毫秒。如果没有sleep就是一个死循环了。
方法二、通过Runnable对象来创建线程
class Thread2{
Thread t2;
t2 = new Thread(new Runnable(){
public void run(){
for(int i = 0;i < music.size();i++){
播放music(i);
try{
sleep(500);
}catch(InterruptedException e){
}
}
}
}).start();
}
启动
调用start()方法就可以启动线程了。
结束
线程只要走完一遍他的生命周期就结束了,这个线程就死亡了
new Thread(new Runnable(){
while(true){
播放music;
}
}).start();
看上去因为没有退出循环的条件,这个程序会一直执行下去,虽然可以使用System.exit();强行终结整个程序,但终究不是上策。有时候我们只是想暂停音乐,但还想使用音乐软件查看其他音乐,此时可以结束掉播放线程就好了。 在以前的jdk版本,可以使用destroy()方法直接摧毁线程,或者使用stop()方法结束线程。但是在新版本里,这些都已经弃用了。我们只需要加一条break;语句跳出这个“死循环”就可以接着走线程直至结束线程的生命周期。
怎么暂时停止某一线程
t1.sleep()
调用某个Thread对象的sleep()方法,可以使该线程暂时停止(挂起)
t2.join()
t1走到某一步执行
try{
t2.join();
}catch(InterruptedException e){
}
此时会调用线程2,去走线程2,走完再回来接着走。
|