导航:首页 > 使用方法 > 线程常用方法

线程常用方法

发布时间:2022-02-12 19:08:31

⑴ 多线程实现的几种常用的方法

有三种:
(1)继承Thread类,重写run函数
创建:
class xx extends Thread{
public void run(){
Thread.sleep(1000) //线程休眠1000毫秒,sleep使线程进入Block状态,并释放资源
}}
开启线程:
对象.start() //启动线程,run函数运行
(2)实现Runnable接口,重写run函数
开启线程:
Thread t = new Thread(对象) //创建线程对象
t.start()
(3)实现Callable接口,重写call函数
Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。
Callable和Runnable有几点不同:
①Callable规定的方法是call(),而Runnable规定的方法是run().
②Callable的任务执行后可返回值,而Runnable的任务是不能返回值的
③call()方法可抛出异常,而run()方法是不能抛出异常的。
④运行Callable任务可拿到一个Future对象,Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等
待计算的完成,并检索计算的结果.通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果

⑵ 实现多线程有几种方式,多线程同步怎么做,说说几个线程里常用的方法

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有两种,分别是synchronized,wait与notify

⑶ 线程同步的方式有哪几种

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

sleep():使一个正在运知行的线程处于睡眠状态,是一个静态方法,调用此道方法要捕捉InterruptedException异常。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不专能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让属它们竞争。

⑷ 1. 写出用Java编写多线程程序的两种常用方法

1、继承Thread,然后生成对象

2、用类A实现runable接口,然后用你实现runnable的类A,生成Thread对象 Thread(A对象);

API 上说明如下:

创建新执行线程有两种方法。一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的
run 方法。接下来可以分配并启动该子类的实例。例如,计算大于某一规定值的质数的线程可以写成:

classPrimeThreadextendsThread{
longminPrime;
PrimeThread(longminPrime){
this.minPrime=minPrime;
}

publicvoidrun(){
//
...
}
}

然后,下列代码会创建并启动一个线程:

PrimeThreadp=newPrimeThread(143);
p.start();

创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run
方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。采用这种风格的同一个例子如下所示:

implementsRunnable{
longminPrime;
PrimeRun(longminPrime){
this.minPrime=minPrime;
}

publicvoidrun(){
//
...
}
}

然后,下列代码会创建并启动一个线程:

rimeRunp=newPrimeRun(143);

newThread(p).start();

什么是多线程操作

多线程的概念?
说起多线程,那么就不得不说什么是线程,而说起线程,又不得不说什么是进程。
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
进程可以简单的理解为一个可以独立运行的程序单位。它是线程的集合,进程就是有一个或多个线程构成的,每一个线程都是进程中的一条执行路径。
那么多线程就很容易理解:多线程就是指一个进程中同时有多个执行路径(线程)正在执行。
为什么要使用多线程?
1.在一个程序中,有很多的操作是非常耗时的,如数据库读写操作,IO操作等,如果使用单线程,那么程序就必须等待这些操作执行完成之后才能执行其他操作。使用多线程,可以在将耗时任务放在后台继续执行的同时,同时执行其他操作。
2.可以提高程序的效率。
3.在一些等待的任务上,如用户输入,文件读取等,多线程就非常有用了。
缺点:
1.使用太多线程,是很耗系统资源,因为线程需要开辟内存。更多线程需要更多内存。
2.影响系统性能,因为操作系统需要在线程之间来回切换。
3.需要考虑线程操作对程序的影响,如线程挂起,中止等操作对程序的影响。
4.线程使用不当会发生很多问题。
总结:多线程是异步的,但这不代表多线程真的是几个线程是在同时进行,实际上是系统不断地在各个线程之间来回的切换(因为系统切换的速度非常的快,所以给我们在同时运行的错觉)。
2.多线程与高并发的联系。
高并发:高并发指的是一种系统运行过程中遇到的一种“短时间内遇到大量操作请求”的情况,主要发生在web系统集中大量访问或者socket端口集中性收到大量请求(例如:12306的抢票情况;天猫双十一活动)。该情况的发生会导致系统在这段时间内执行大量操作,例如对资源的请求,数据库的操作等。如果高并发处理不好,不仅仅降低了用户的体验度(请求响应时间过长),同时可能导致系统宕机,严重的甚至导致OOM异常,系统停止工作等。如果要想系统能够适应高并发状态,则需要从各个方面进行系统优化,包括,硬件、网络、系统架构、开发语言的选取、数据结构的运用、算法优化、数据库优化……。
而多线程只是在同/异步角度上解决高并发问题的其中的一个方法手段,是在同一时刻利用计算机闲置资源的一种方式。
多线程在高并发问题中的作用就是充分利用计算机资源,使计算机的资源在每一时刻都能达到最大的利用率,不至于浪费计算机资源使其闲置。
3.线程的创建,停止,常用方法介绍。
1.线程的创建:
线程创建主要有2种方式,一种是继承Thread类,重写run方法即可;(Thread类实现了Runable接口)
另一种则是实现Runable接口,也需要重写run方法。
线程的启动,调用start()方法即可。 我们也可以直接使用线程对象的run方法,不过直接使用,run方法就只是一个普通的方法了。

其他的还有: 通过匿名内部类的方法创建;实现Callable接口。。。。。

2.线程常用方法:
currentThread()方法:该方法返回当前线程的信息 .getName()可以返回线程名称。

isAlive()方法:该方法判断当前线程是否处于活动状态。
sleep()方法:该方法是让“当前正在执行的线程“休眠指定的时间,正在执行的线程是指this.currentThread()返回的线程。
getId()方法:该方法是获取线程的唯一标识。
3.线程的停止:
在java中,停止线程并不简单,不想for。。break那样说停就停,需要一定的技巧。

线程的停止有3种方法:
1.线程正常终止,即run()方法运行结束正常停止。
2.使用interrupt方法中断线程。
3.使用stop方法暴力停止线程。
interrupt方法中断线程介绍:
interrupt方法其实并不是直接中断线程,只是给线程添加一个中断标志。
判断线程是否是停止状态:
this.interrupted(); 判断当前线程是否已经中断。(判断的是这个方法所在的代码对应的线程,而不是调用对象对应的线程)

this.isInterrupted(); 判断线程是否已经中断。(谁调用,判断谁)

注:.interrupted()与isInterrupted()的区别:
interrupted()方法判断的是所在代码对应的线程是否中断,而后者判断的是调用对象对应的线程是否停止
前者执行后有清除状态的功能(如连续调用两次时,第一次返回true,则第二次会返回false)
后者没有清除状态的功能(两次返回都为true)
真正停止线程的方法:
异常法:
在run方法中 使用 this.interrupted();判断线程终止状态,如果为true则 throw new interruptedException()然后捕获该异常即可停止线程。

return停止线程:
在run方法中 使用 this.interrupted();判断线程终止状态,如果为true则return停止线程。 (建议使用异常法停止线程,因为还可以在catch中使线程向上抛,让线程停止的事件得以传播)。

暴力法:
使用stop()方法强行停止线程(强烈不建议使用,会造成很多不可预估的后果,已经被标记为过时)
(使用stop方法会抛出 java.lang.ThreadDeath 异常,并且stop方法会释放锁,很容易造成数据不一致)
注:在休眠中停止线程:
在sleep状态下停止线程 会报异常,并且会清除线程状态值为false;
先停止后sleep,同样会报异常 sleep interrupted;

4.守护线程。
希望对您有所帮助!~

⑹ thread类的方法是什么

Thread类的常用方法:

String getName()返回该线程的名称。

void setName(String name)改变线程名称,使之与参数name相同。

int getPriority()返回线程的优先级。

void setPriority(int newPriority)更改线程的优先级。

boolean isDaemon()测试该线程是否为守护线程。

void setDaemon(boolean on)将该线程标记为守护线程或用户线程。

void interrupt()中断线程。

static void yield()暂停当前正在执行的线程对象,并执行其他线程。

void join()等待该线程终止。

void run()

void start()

从Object类继承来的方法void notify() void wait()

⑺ java 中使用线程的方法到底有哪些

都是通过new Thread().start()开启线程,一般有两种方式:1是继承自Thread类,2是实现Runnable接口,第二种方式更加灵活,Java不支持多继承,但是支持多实现。求采纳

⑻ 线程间通信方式有哪些

多线程通信的方法主要有以下三种:
1.全局变量

进程中的线程间内存共享,这是比较常用的通信方式和交互方式。
注:定义全局变量时最好使用volatile来定义,以防编译器对此变量进行优化。

2.Message消息机制
常用的Message通信的接口主要有两个:PostMessage和PostThreadMessage,

PostMessage为线程向主窗口发送消息。而PostThreadMessage是任意两个线程之间的通信接口。

2.1.PostMessage()
函数原型:
B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);

参数:
hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:
HWND.BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口
和弹出式窗口。消息不被寄送到子窗口。
NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样。
Msg:指定被寄送的消息。
wParam:指定附加的消息特定的信息。
IParam:指定附加的消息特定的信息。
返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。
MS还提供了SendMessage方法进行消息间通讯,SendMessage(),他和PostMessage的区别是:

SendMessage是同步的,而PostMessage是异步的。SendMessage必须等发送的消息执行之后,才返回。
2.2.PostThreadMessage()

PostThreadMessage方法可以将消息发送到指定线程。
函数原型:BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam, LPARAM lParam);

参数除了ThreadId之外,基本和PostMessage相同。
目标线程通过GetMessage()方法来接受消息。

注:使用这个方法时,目标线程必须已经有自己的消息队列。否则会返回ERROR_INVALID_THREAD_ID错误。可以用
PeekMessage()给线程创建消息队列。
3.CEvent对象

CEvent为MFC中的一个对象,可以通过对CEvent的触发状态进行改变,从而实现线程间的通信和同步。

⑼ 创建线程有几种方式和Java中常用的线程池

java创建线程的方式有三种
第一种是继承Thread类 实现方法run() 不可以抛异常 无返回值
第二种是实现Runnable接口 实现方法run() 不可以抛异常 无返回值
第三种是实现Callable<T>接口,接口中要覆盖的方法是 public <T> call() 注意:此方法可以抛异常,而前两种不能 而且此方法可以有返回值

第三种如何运行呢 Callable接口在util.concurrent包中,由线程池提交
import java.util.concurrent.*;
ExecutorService e = Executors.newFixedThreadPool(10); 参数表示最多可以运行几个线程
e.submit(); 这个里面参数传 实现Callable接口那个类的对象

阅读全文

与线程常用方法相关的资料

热点内容
缝纫机皮带安装方法 浏览:961
正确的站姿腿部锻炼方法 浏览:470
养生鸡蛋的食用方法 浏览:430
小鸡搬砖新方法视频 浏览:220
线稿设计图起稿方法研究 浏览:466
v20手机卡顿解决方法 浏览:790
湖南国珍松花钙奶粉食用方法 浏览:6
土星环的质量计算方法 浏览:603
宝宝简单收惊方法 浏览:396
政府预算的编制方法有哪些 浏览:899
哈尔滨高三核酸检测方法 浏览:51
一次性口腔通气道使用方法视频 浏览:157
单杠背阔肌的锻炼方法 浏览:38
木糖醇的功效及食用方法 浏览:933
读懂课文的方法有哪些 浏览:529
4d的改善方法报告怎么写 浏览:464
预制楼板安装灌注的施工方法 浏览:953
高分复习方法视频 浏览:640
猪皮冻用什么方法熬最好 浏览:670
小孩抑郁症的治疗方法 浏览:223