本文主要是详解Java基础知识之多线程,更多IOS技术知识,请登陆疯狂软件教育官网。
1、认识线程
a) 对于线程来说,容易混淆的还有进程,我们用一个例子来区分它们,每次打开一个word文档,这就是一个进程,一个word中的拼写检查这是一个线程,再如每登陆一个QQ,这是一个进程,QQ中的每一个会话都是一个线程。
b)对于只有一个CPU的电脑来说,一个时间点只有一个进程占用CPU
2、Java中如何实现线程
Java中实现多线程可以采用:继承Thread类,或,实现Runnable接口
a)继承Thread类,这个方式必须覆写run()方法
[java]
class 类名称 extends Thread{
//成员变量
//成员方法
public void run(){
//线程主体
}
}
小例子
[java]
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class myThread extends Thread {
Map<String,? extends Collection<Integer>> map= new HashMap<String,List<Integer>>();
private String name;
public myThread(String name){
this.name = name;
}
public void run(){
for(int i = 0; i < 10; i++){
System.out.println(name + "运行,i="+i);
}
}
}
public class MyThread {
public static void main(String[] args){
myThread mt1 = new myThread("线程A");
myThread mt2 = new myThread("线程B");
mt1.start();
mt2.start();
}
}
b)实现Runnable接口,覆写run()方法
[java]
public class Thread2 implements Runnable {
//成员变量
//成员方法
public void run(){
//线程主体
}
}
小例子:
[java]
class A implements Runnable{
//成员变量
//成员方法
private String name;
public A(String name){
this.name = name;
}
public void run(){
//线程主体
for(int i = 0; i < 10; i++){
System.out.println(name + "运行,i="+i);
}
}
}
public class Thread2{
public static void maim(String[] args){
A a1 = new A("线程A");
A a2 = new A("线程B");
Thread t1 = new Thread(a1);
Thread t2 = new Thread(a2);
t1.start();
t2.start();
}
}
3、两种方式的区别及使用结论
a)使用Runnable接口可以实现资源的共享,而Thread类不行.
b)避免单继承带来的局限性
在开发中使用Runnable接口是比较合适的
4、线程的状态
创建状态:准备好一个多线程对象,Thread t = new Thread();
就绪状态:调用start()方法,等待CPU调度
运行状态:执行run()方法
阻塞状态:暂时停止执行,可能将资源给其他线程使用
终止状态:线程执行完毕,不再使用