码迷,mamicode.com
首页 > 编程语言 > 详细

java 多线程一

时间:2017-09-30 15:00:03      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:ext   creat   err   print   nts   ati   java 多线程   try   exce   

java 多线程实现的几种方式:

1、extends Thread

2、implements Runnable

3、implements Callable<>

下面上代码:

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

/**
 * Created by root on 17-9-30.
 */
public class Test4Thread {
    public static void main(String[] args) throws Exception {

        //**********************
        MyThread1 myThread1_1=new MyThread1("myThread1_1");
        MyThread1 myThread1_2=new MyThread1("myThread1_2");
        MyThread1 myThread1_3=new MyThread1("myThread1_3");
        myThread1_1.start();
        myThread1_2.start();
        myThread1_3.start();

        //***********************
        MyThread2 myThread2 = new MyThread2();
        Thread t2_1 = new Thread(myThread2);
        Thread t2_2 = new Thread(myThread2);
        Thread t2_3 = new Thread(myThread2);
        t2_1.setName("MyThread2_1");
        t2_2.setName("MyThread2_2");
        t2_3.setName("MyThread2_3");
        t2_1.start();
        t2_2.start();
        t2_3.start();

        //**************************
        MyThread3 myThread3=new MyThread3();
        FutureTask<String> futureTask1=new FutureTask<String>(myThread3);
        FutureTask<String> futureTask2=new FutureTask<String>(myThread3);
        FutureTask<String> futureTask3=new FutureTask<String>(myThread3);
        Thread t3_1 = new Thread(futureTask1);
        Thread t3_2 = new Thread(futureTask2);
        Thread t3_3 = new Thread(futureTask3);

        t3_1.setName("MyThread3_1");
        t3_2.setName("MyThread3_2");
        t3_3.setName("MyThread3_3");
        t3_1.start();
        t3_2.start();
        t3_3.start();
        System.out.println(futureTask1.get());
        System.out.println(futureTask2.get());
        System.out.println(futureTask3.get());


    }
}


class MyThread1 extends Thread {
    int tickets = 5;

    public MyThread1(String name) {
        super(name);

    }

    @Override
    public void run() {
        for (; tickets > 0; ) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + ":" + tickets--);
        }
    }
}

class MyThread2 implements Runnable {
    int tickets = 5;

    public void run() {
        for (; tickets > 0; ) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + ":" + tickets--);
        }
    }
}

class MyThread3 implements Callable<String> {

    int tickets=5;
    public String call() throws Exception {
        for (; tickets > 0; ) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + ":" + tickets--);
        }
        return Thread.currentThread().getName() + ":" +"卖完了";
    }
}

 运行结果:

myThread1_1:5
myThread1_2:5
myThread1_3:5
myThread1_1:4
myThread1_3:4
myThread1_2:4
myThread1_1:3
myThread1_2:3
myThread1_3:3
myThread1_1:2
myThread1_3:2
myThread1_2:2
myThread1_1:1
myThread1_3:1
myThread1_2:1

 

MyThread2_1:5
MyThread2_2:5
MyThread2_3:4
MyThread2_1:3
MyThread2_2:2
MyThread2_3:1
MyThread2_1:0
MyThread2_2:-1

 

MyThread3_1:5
MyThread3_2:4
MyThread3_3:3
MyThread3_1:2
MyThread3_2:1
MyThread3_1:卖完了
MyThread3_2:卖完了
MyThread3_3:0
MyThread3_3:卖完了

 

可以看到,后在需要实现多线程操作公工数据时最好用Runable 、Callable接口的方式,当然也可以用Thread (类似Runable的方式实现)。

java 多线程一

标签:ext   creat   err   print   nts   ati   java 多线程   try   exce   

原文地址:http://www.cnblogs.com/lanqie/p/7614535.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!