什么是线程?学了线程能干嘛?
1.了解线程,就要先知道他的爸爸,进程。即每个java程序都是一个进程,我们写的程序就通过这个进程执行。具体我也清除,想深究的可以看操作系统,里面有讲进程是怎么执行的。回归正题,但这个进程跑程序,有点大材小用,好比开个大卡车逛菜市场,可以开但是没必要。所以我们把大卡车拆了,重组把他细分,分出他的子单元–进程,也就是卡车一部分,说不定就是个车胎,甚至更小。车只有一个,我开着去买菜,我对象就没法开卡车去买菜(做梦,程序员哪来的对象!),所以我们决定效仿哪吒。把卡车分了,一人骑俩车轱辘去买菜,这样我俩都买菜的路程都快了,而且可能俩人一人买肉一人买菜,花的时间更少了。或者我俩买相同的,俩人就能买double 了。妈妈再也不怕午饭吃成晚饭了。–线程就是干了这么个事。
2.啰嗦这么多,很多人也看够了,都是一堆废话(其实是我打字累了)简单粗暴,直接干API
还是先讲他爸–实现一个线程需要继承他的父类 extends Thread。
或者不想认他当爸爸,想少奋斗二十年,找个富爸爸。暂时先留着爸爸这位子,先虚位以待,有德者局之。
那我们可以把他认为干爸爸,实现接口来实现线程—implements Runnable
两个没啥区别,唯一区别就是干爸爸,错了是Runnable ,没钱。呸!方法不全!他只有 一个void run(),还是个抽象的,你实现了还得自己重写。但Thread 就不一样了,你只要继承了Thread,那么你啥也不用干了,天天在家睡懒觉就可以了,啥也不用写,直接拿过来用。只要你知道钱放在哪儿(呸,是方法名叫啥!)当然你钱要怎么花,肯定你还得自己花,也就是你要重写void run()方法。说了这么多。肯定心动的人不少,但只诱惑不给联系方式那是耍流氓。
富爸爸(是Thread!)
class Orange extends Thread{
public void run(){
........
}
}
main(...){
Orange orange =new Orange();
}
干爸爸(Runnable)
class Orange extends Thread{
public void run(){
........
}
}
main(...){
Orange orange =new Orange();
Thread t=new Thread(orange);
}
也就是说用Runable实现线程最后要套一层Thread外壳,摇身一变成为Thread就啥方法也会了
具体喜欢用哪种看个人爱好,当然像我们程序员这种浩然荡气集一身的人,肯定不为五斗米折腰,前辈们一般教导我们用Runable。(万一有比Thread还重要(fu)的父类呢)
3.他俩的钱放在哪里呢(是方法!)
1.setNmame(get)线程名称就当普通同类的一个属性那么用
2.同样的用法还有int Priority(set、get)
控制线程的生命周期的有start()开启,run()执行,join()让线程跑到死(这里不,可以加毫秒微妙参数,但不清楚是一段时间后让他跑死还是跑这么段时间不管完不完事都让他死,有好心的读者可以告诉我,不告诉我就只好自己百度了),sleep()让线程先睡会,destroy()弄死线程。
其中start()多调用几次也是调用的同一个线程,想多开线程需要多创建几个线程对象,光start是多不了的
3.线程跑着想关心下他:
isAlive()看还活着没,isInterrupted()看被别的线程拦下没,没拦下你可以拦下他interrupt(),setDemn()把他整为垫底的,只要还有线程活着你就给我活着,就剩你自己了,那你也去死吧。