首页IT科技java多线程用法(java :多线程实现的三种方式)

java多线程用法(java :多线程实现的三种方式)

时间2025-09-19 14:38:44分类IT科技浏览5690
导读:一、并行、串行、并发...

一                、并行                        、串行        、并发

在了解java中多线程的三种实现方式之前                ,我们首先需要明白并行                、串行                        、并发三个概念                。

1.并行:多个CPU同时处理多个任务;

2.串行:单个CPU处理多个任务                        ,当一个任务执行完成之后下一个任务才能够执行;

3.并发:单个CPU处理多个任务        ,每个任务都会被分一定的时间片                ,一个任务执行一段时间无论完成与否都要切换另一个任务执行                        。

在java中多线程其实就是并发的一种模式        。

二        、java实现多线程的三种方式

我们以买咖啡为例                        ,现在咖啡店只有一个窗口        ,将每一个人买咖啡的过程视为一个任务        。

1.实现Runnable接口

这里我们先是直接调用了run方法        ,又调用了start方法                        ,这样做是为了说明start方法与run方法的不同                        。start方法是启动就绪的线程                ,然后调用线程内的run方法;run并不会启动线程        ,只是执行其中的方法体                。start方法只能调用一次                        ,但是run方法可以调用多次        。

2.继承Thread类

package multithreading; public class LThreadOne { public static void buyCoffee(String name) { System.out.println(name + "开始买咖啡"); System.out.println(name + "正在买咖啡"); System.out.println(name + "买完了"); } public static void main(String[] args) { th th1 = new th("张三"); th th2 = new th("李四"); th th3 = new th("王五"); th1.start(); th2.start(); th3.start(); } } class th extends Thread { String name; public th(String name) { this.name = name; } @Override public void run() { LThreadOne.buyCoffee(name); } }

3.实现Callable接口

package multithreading; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class LCallable { public static void buyCoffee(String name) { System.out.println(name + "开始买咖啡"); System.out.println(name + "正在买咖啡"); System.out.println(name + "买完了"); } public static void main(String[] args) { lca l1 = new lca("张三"); lca l2 = new lca("李四"); lca l3 = new lca("王五"); FutureTask futureTask1 = new FutureTask<>(l1); FutureTask futureTask2 = new FutureTask<>(l2); FutureTask futureTask3 = new FutureTask<>(l3); Thread thread1 = new Thread(futureTask1); Thread thread2 = new Thread(futureTask2); Thread thread3 = new Thread(futureTask3); thread1.start(); thread2.start(); thread3.start(); } } class lca implements Callable { String name; public lca(String name) { this.name = name; } @Override public String call() throws Exception { LCallable.buyCoffee(name); return null; } }

以上就是java中三种实现多线程的方式                        。但是观察以上结果我们也不难发现一个问题                ,一个窗口售卖咖啡,应该是一个人买完了另一个人才能开始买                。还好这里仅仅是售卖咖啡                        ,如果是银行的存取款                        ,就可能会出现一笔存款被取多次的问题,这就是线程的安全问题。

线程安全问题:当多个线程操作同一个数据时                ,可能会出现数据的异常                        。

具体解决线程安全问题就需要用到同步和互斥的概念了                        。

互斥:一个共享资源                        ,A访问时        ,其它的都被阻塞(不能访问)                ,当A访问完成时另一个才能访问;

同步:A的结果是B的前提                        ,也就是A        、B不能同时运行。

互斥是一种特殊的同步        ,而同步是更为复杂的互斥                。

(本文仅作个人学习记录用        ,如有纰漏敬请指正)

声明:本站所有文章                        ,如无特殊说明或标注                ,均为本站原创发布                        。任何个人或组织        ,在未征得本站同意时                        ,禁止复制                        、盗用                、采集        、发布本站内容到任何网站                        、书籍等各类媒体平台        。如若本站内容侵犯了原著者的合法权益                ,可联系我们进行处理                。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
php水印生成源码(PHPCMS中PNG水印不显示?)