初步学习多线程

来源:互联网 发布:淘宝的减肥药有用吗 编辑:程序博客网 时间:2024/05/22 01:46

Java多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。

首先看一下线程的状态图


第一种实现多线程的方法:Thread

Thread实现多线程 ,本质上是实现了Runnable()接口的实例,线程的开启的唯一方法是调用Thread的start()方法不难看出,他仅仅只是处于了就绪状态,通过run()方法,走到运行状态,通过自己的方法直接extend Thread

在线程启动时执行自定义的run()方法,下面来一个小小的案例:

package Thread1;


public class MyThread extends Thread {
private int ticketNum = 10;
public MyThread(String name) {
super(name);
}
//线程体
public void run() {
for (int i = 1; i <= 100; i++) {
if (ticketNum > 0)
System.out.println(Thread.currentThread().getName() + ":卖票"
+ (ticketNum--));
   }
}
}


package Thread1;


public class Test {
public static void main(String[] args) throws Exception {
Thread my=new MyThread("窗口一");
Thread my1=new MyThread("窗口二");
Thread my2=new MyThread("窗口三");
    my.start();
my1.start();
my2.start();


前两个案例都是实现购票,但是两者存在差距,Thread的资源不是共享的

第二种实现多线程的方法Runnable()接口

package Thread1;


public class RunnableTest implements Runnable {
private int ticketNum = 10;
    
public void run() {
for (int i = 1; i <= 100; i++) {
if (ticketNum > 0)
System.out.println(Thread.currentThread().getName() + "卖票"
+ (ticketNum--));
}
}


}

RunnableTest run=new RunnableTest();
Thread t1=new Thread(run, "窗口1");
Thread t2=new Thread(run, "窗口2");
Thread t3=new Thread(run, "窗口3");
   t1.start();
   t2.start();
   t3.start();

第三种使用ExecutorService、Callable、Future实现有返回结果的多线程,看下一个博客










原创粉丝点击