说说Java 多线程的三种实现方法

转载自品略图书馆 http://www.pinlue.com/article/2020/05/2102/3810573725857.html

 

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来实现多线程的特点:可以取得线程执行结果,具有返回值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值