问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Java多线程是什么意思?

发布网友 发布时间:2022-04-22 22:02

我来回答

5个回答

热心网友 时间:2022-05-09 23:26

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

1、继承Thread类实现多线程
继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:

在合适的地方启动线程如下:

2、实现Runnable接口方式实现多线程
如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口,如下:

为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:

事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:

3、使用ExecutorService、Callable、Future实现有返回结果的多线程
ExecutorService、Callable、Future这个对象实际上都是属于Executor框架中的功能类。想要详细了解Executor框架的可以访问http://www.javaeye.com/topic/366591 ,这里面对该框架做了很详细的解释。返回结果的线程是在JDK1.5中引入的新特征,确实很实用,有了这种特征我就不需要再为了得到返回值而大费周折了,而且即便实现了也可能漏洞百出。
可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了,再结合线程池接口ExecutorService就可以实现传说中有返回结果的多线程了。下面提供了一个完整的有返回结果的多线程测试例子,在JDK1.5下验证过没问题可以直接使用。代码如下:

代码说明:
上述代码中Executors类,提供了一系列工厂方法用于创先线程池,返回的线程池都实现了ExecutorService接口。
public static ExecutorService newFixedThreadPool(int nThreads) 
创建固定数目线程的线程池。
public static ExecutorService newCachedThreadPool() 
创建一个可缓存的线程池,调用execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。
public static ExecutorService newSingleThreadExecutor() 
创建一个单线程化的Executor。
public static ScheledExecutorService newScheledThreadPool(int corePoolSize) 
创建一个支持定时及周期性的任务执行的线程池,多数情况下可用来替代Timer类。

总结:ExecutoreService提供了submit()方法,传递一个Callable,或Runnable,返回Future。如果Executor后台线程池还没有完成Callable的计算,这调用返回Future对象的get()方法,会阻塞直到计算完成。

热心网友 时间:2022-05-10 00:44

java语言已经内置了多线程支持,所有实现runnable接口的类都可被启动一个新线程,新线程会执行该实例的run()方法,当run()方法执行完毕后,线程就结束了。

热心网友 时间:2022-05-10 02:18

我们现在所使用操作系统都是多任务操作系统(早期使用的DOS操作系统为单任务操作系统),多任务操作指在同一时刻可以同时做多件事(可以同时执行多个程序)。

热心网友 时间:2022-05-10 04:10

这里先不讲juc包里的多线程类。juc相关内容会在Java并发专题讲解。
1. 线程的实现可以通过继承Thread类和实现Runable接口 也可以使用线程池。callable配合future可以实现线程中的数据获取。
2. Java中的线程有7种状态,new runable running blocked waiting timewaiting terminate
blocked是线程等待其他线程锁释放。 waiting是wait以后线程无限等待其他线程使用notify唤醒 timewating是有限时间地等待被唤醒,也可能是sleep固定时间。
3. Thread的join是实例方法,比如a.join(b),则说明a线程要等b线程运行完才会运行。
4. o.wait方法会让持有该对象o的线程释放锁并且进入阻塞状态,notify则是持有o锁对象的线程通知其他等待锁的线程获取锁。notify方法并不会释放锁。注意这两个方法都只能在synchronized同步方法或同步块里使用。
5. synchronized方法底层使用系统调用的mutex锁,开销较大,jvm会为每个锁对象维护一个等待队列,让等待该对象锁的线程在这个队列中等待。当线程获取不到锁时则让线程阻塞,而其他检查notify以后则会通知任意一个线程,所以这个锁时非公平锁。
6. Thread.sleep(),Thread.interrupt()等方法都是类方法,表示当前调用该方法的线程的操作。
一个线程实例连续start两次会抛异常,这是因为线程start后会设置标识,如果再次start则判断为错误。

热心网友 时间:2022-05-10 06:18

1. 线程的实现可以通过继承Thread类和实现Runable接口 也可以使用线程池。callable配合future可以实现线程中的数据获取。
2. Java中的线程有7种状态,new runable running blocked waiting timewaiting terminate
blocked是线程等待其他线程锁释放。 waiting是wait以后线程无限等待其他线程使用notify唤醒 timewating是有限时间地等待被唤醒,也可能是sleep固定时间。
3. Thread的join是实例方法,比如a.join(b),则说明a线程要等b线程运行完才会运行。
4. o.wait方法会让持有该对象o的线程释放锁并且进入阻塞状态,notify则是持有o锁对象的线程通知其他等待锁的线程获取锁。notify方法并不会释放锁。注意这两个方法都只能在synchronized同步方法或同步块里使用。
5. synchronized方法底层使用系统调用的mutex锁,开销较大,jvm会为每个锁对象维护一个等待队列,让等待该对象锁的线程在这个队列中等待。当线程获取不到锁时则让线程阻塞,而其他检查notify以后则会通知任意一个线程,所以这个锁时非公平锁。
6. Thread.sleep(),Thread.interrupt()等方法都是类方法,表示当前调用该方法的线程的操作。
一个线程实例连续start两次会抛异常,这是因为线程start后会设置标识,如果再次start则判断为错误。如果感兴趣可以B站搜索高淇老师的视频看看,希望对您有所帮助。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
招投标技术负责人是什么证 欧美的经典的线稿漫画 推荐几款欧美漫画,跪求!!! 十大DC漫画推荐 DC漫画必看经典盘点 dc好看的漫画有哪些 十大欧美漫画推荐 欧洲经典漫画盘点 欧洲好看的漫画有哪些 欧美有哪些经典的漫画作品? 十大美国漫画推荐 美国漫画经典作品 美国著名的漫画有哪些 音悦台mini客户端为什么不能记住账号自动登录呢,,,每次都要重新输~郁... 请问 音悦台 和 百度 怎样解绑手机? 如何注册音悦台账号 14K金可以用磁铁吸得到吗 任何物质都具有磁性吗?金能被磁体吸引吗? 黄金是否会被磁铁吸起来? 金子能被吸铁石吸引吗 一个人如果老是把你的微信删了,是故意的还是真的不小心删了,还是什么意思? 在庭审中法庭责令原告提交微信完整版但原告故意删除自已不利的部份违法吗? 朋友把我微信故意删了,我该怎么办 评论女朋友的快手暖心句子怎么写? 老公故意删除微信账单说明什么 发快手公开女朋友用什么句子? 如果对方把你微信删除了。你有几种方式可以添加回来? 快手作品评论有哪些暖心的句子? 老公故意删除微信账单说明什么? 好友故意删掉我的微信,以及退出有关我们的群,是啥意思?我还需要去问原因吗? 情人说故意删的微信叫我电话联系是怎么了? 我故意删除我男朋友的微信又加上想看看他什么时候通过,加的时候他居然不要验证直接通过了,怎么回事? 同事离职应该删除它微信吗?平时除了工作,私下没有联系。 为什么老师故意删别人微信? 适合发快手的句子有哪些? 被人刻意删除的微信聊天记录警察能恢复吗? 18K金能被吸铁石吸住吗?K金的定义是什么? 什么是JAVA的多线程? 18k金永磁铁吸住是不是假的? 999黄金能被慈铁吸起来吗 为什么现在学Java的人这么多? 度黄金能被磁铁吸起来吗? 14k金可以用吸铁石吸起来吗? Java多继承和多实现 怎么回事? 拆南孚7号电池,把外层塑料皮剥开露出金属,拿磁铁去试,发现磁铁吸在外层金属上,这是怎么回事,那层金? 学习java一般要学多久? 哪几种金属磁铁可以吸起来? Java语言的用途多吗? 黄金磁铁和普通磁铁有什么区别 Java现在市面上用的人还多吗? 求问,java中如何进行多行输入 现在是java用的多,还是C语言用的多 Java主要有那些特性? 煎饺子要怎以做? 煎饺子时,如何才能让饺子煎的刚刚好? 煎饺子的时候,怎样做才可以让饺子煎的刚刚好?