打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java 多线程的三种实现方法

Java SE高级开发——多线程的实现

进程与线程的概念:
进程:操作系统中,一个程序的执行周期称为一个进程
线程:一个程序同时执行多个任务的时候,我们把每一任务称作一个线程

进程与线程相比较,线程更”轻量级“,创建、撤销一个线程比启动一个进程开销要小的多。但是,没有进程就没有线程,进程一旦终止,其内的线程也不再存在。

多线程与多进程的区别:
每个进程都拥有自己的完整变量,而线程之间则共享数据。共享数据使得线程间通信更加方便、有效。

多线程实现:

1、继承Thread类实现多线程

class MyThread extends Thread{//定义线程主体类    private String title;    public MyThread(String title){        this.title = title;    }        @Override    public void run(){        for(int i = 0; i < 10; i  ){            System.out.println(this.title   "  i = " i);        }    }}public class ThreadTest {    public static void main(String[] args) {        MyThread myThread1 = new MyThread("线程1");//创建新线程        MyThread myThread2 = new MyThread("线程2");        MyThread myThread3 = new MyThread("线程3");        myThread1.run();//启动线程        myThread2.run();        myThread3.run();    }}

运行结果:


由运行结果可以看出,此时线程只是按顺序打印,并没有多线程的共享数据的性质,所有我们要特别注意:启动线程需要使用start()方法。

public static void main(String[] args) {	MyThread myThread1 = new MyThread("线程1");	MyThread myThread2 = new MyThread("线程2");	MyThread myThread3 = new MyThread("线程3");	myThread1.start();	myThread2.start();	myThread3.start();}

此时线程变为交替执行


2、Runable实现多线程

class MyThread implements Runnable{    private String title;    public MyThread(String title){        this.title = title;    }    @Override    public void run() {        for(int i = 0; i < 10; i  ){            System.out.println(this.title   "  i = " i);        }    }}public class ThreadTest {    public static void main(String[] args) {        MyThread myThread1 = new MyThread("线程1");        MyThread myThread2 = new MyThread("线程2");        MyThread myThread3 = new MyThread("线程3");        new Thread(myThread1).start();        new Thread(myThread2).start();        new Thread(myThread3).start();    }}


注意:实现Runnable接口比继承Thread类所具有的优势:
a、从形式上来说,可以避免Java中的单继承局限

b、使用Runnable实现的多线程的程序类可以更好的描述出程序共享的概念

3、Callable实现多线程

class MyThread implements Callable<String>{    private int tickets = 10;    @Override    public String call() throws Exception {        while (this.tickets >= 0){            System.out.println("剩余票数为:" this.tickets--);        }        return "票卖完了";    }}public class ThreadTest {    public static void main(String[] args) throws InterruptedException,ExecutionException {        FutureTask<String> task = new FutureTask<>(new MyThread());        new Thread(task).start();        new Thread(task).start();        System.out.println(task.get());    }}

通过继承Callable来实现多线程的特点:可以取得线程执行结果,具有返回值

来源:http://www.icode9.com/content-1-130451.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
多线程入门就这么简单
Java中继承thread类与实现Runnable接口的区别
多线程/JAVA多线程 - 魔乐培训 高端JAVA培训 魔乐科技JAVA培训
[转]Java中Runnable和Thread的区别
初学Java多线程:用Thread类创建线程
Java 多线程总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服