Java多线程实现
Java多线程实现
①继承Thread类
程序在运行主方法main的时候,Java虚拟机会启动一个进程,主线程main在main()调用的时候被创建,随着两个对象的start()方法的调用,另外两个线程也启动了,于是多线程就实现了!
start()方法调用后并不会马上执行多线程代码,而是先使线程编程可运行状态(Runnable),什么时候运行是操作系统决定的!(所以每次跑代码输出的都可能不一样)。多线程程序是乱序执行的。
Thread.sleep()方法调用是为了不让当前线程霸占所获取的CPU资源。
注意:重复调用start方法会出现java.lang.liiegalThreadStateException异常!!
public class Thread1 extends Thread{
private String name;
public Thread1(String name){
this.name = name;
}
public void run(){
for(int i=0;i<10;i++){
System.out.println(name+"运行:"+i);
try{
sleep((int)Math.random()*10);
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Thread1 a = new Thread1("A");
Thread1 b = new Thread1("B");
a.start();
b.start();
}
}
②实现Runnable接口(推荐)
实际上Thread类也是实现了Runnable接口的类,在启动多线程的时候,需要先通过Thread类的构造方法Thread(Runnable target)构造出对象,然后调用Thread对象的start()方法来运行多线程代码。
public class Thread2 implements Runnable{
private String name;
public Thread2(String name){
this.name = name;
}
@Override
public void run() {
for (int i=0;i<10;i++){
System.out.println(name+"运行:"+i);
try {
Thread.sleep((int)Math.random()*10);
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new Thread(new Thread2("C")).start();
new Thread(new Thread2("D")).start();
}
}
③Thread和Runnable的区别
如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。
实现Runnable接口比继承Thread类所具有的优势:
1):适合多个相同的程序代码的线程去处理同一个资源
2):可以避免java中的单继承的限制
3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立
4):线程池只能放入实现Runable或callable类线程,不能直接放入继承Thread的类

浙公网安备 33010602011771号