多线程的常用操作方法

一.线程的命名与取得
多线程的运行状态是不确定的,所以对于多线程操作必须有一个明确标识出线程对象的信息,这个信息往往通过名称来描述,在Thread类中提供有如下的线程名称方法:
1.创建线程的时候设置名称(构造):public Thread(Runnable target, String name)
2.设置线程名称(普通)public final synchronized void setName (String name)
3.取得线程名字(普通)public final String getName()
4.取得当前正在执行的线程对象(Thread类提供)public static native Thread currentThread();
线程是Java应用程序执行的最小单元,创建线程时,如果不指定线程名,则默认Thread—index(0.1.2…),不易辨认线程的功能,则通过创建时使用构造方法或者setName设置名称。
线程名字如果要设置请避免重复,同时中间不要修改。


每当使用Java命令去解释程序的时候,都表示启动了一个新的JVM进程,而主方法只是这个进程上的一个线程而已,所有线程都是通过主线程创建并启动。

**二.线程休眠(sleep()方法)**单位:毫秒
public static native void sleep(long millis)throws InterruptedException
指的是让线程暂缓执行,等到了预计时间之后再恢复执行。线程休眠会立即交出CPU,让CPU去执行其他任务,但不会释放对象锁(当前线程持有对某个对象的锁,则即使调用sleep()方法,其他线程也无法访问这个对象)

代码是依次进入到run方法中的,真正进入到方法的对象可能是多个,也可能是一个。进入代码的顺序可能有差异,但是总体的执行是并法执行。
三.线程让步(yield()方法)
public static native void yield()
暂停当前正在执行的线程对象,并执行其他线程。yield()方法会让当前线程交出CPU,但是不一定立即交出,它交出CPU后只能让拥有相同优先级的线程有获取CPU的机会,yield()不会释放对象锁。
**注意:**调用yield()方法并不会让线程进入阻塞状态,而是让线程重回就绪状态,它只需要等待重新获取CPU执行时间,与sleep()方法不一样。


四.等待该线程终止(join()方法)
public final void join() throws InterruptedException (join()只是对object类wait()做了一层包装而已)
在主线程中调用该方法会让主线程休眠,让调用该方法的线程先执行完毕后再恢复执行主线程。

五.线程的停止
多线程中有三种方式可以停止线程
1.设置标记位,可以是线程正常退出。
2.使用stop方法强制使线程退出,但是该方法不太安全所以已经被放弃了。
3.使用Thread类中的一个interrupt()可以中断线程。


stop方法为什么不安全呢,因为stop会解除由线程获取的所有锁定,当在一个线程对象上调用stop()方法时,这个线程对象所运行的线程就会立即停止,假如一个线程正在执行, 由于方法是同步的, 多个线程访问时总能保证被同时赋值,而如果一个线程正在执行,被调用了 stop()方法,即使在同步 块中,它也会马上stop了,这样就产生了不完整的残废数据。


interrupt() 方法只是改变中断状态而已,它不会中断一个正在运行的线程。这一方法实际完成的是,给受阻塞的线程发出一个中断信号,这样受阻线程就得以退出阻塞的状态。

然而interrupte()方法并不会立即执行中断操作;具体而言,这个方法只会给线程设置一个为true的中断标志(中断 标志只是一个布尔类型的变量),而设置之后,则根据线程当前的状态进行不同的后续操作。如果,线程的当前状 态处于非阻塞状态,那么仅仅是线程的中断标志被修改为true而已;如果线程的当前状态处于阻塞状态,那么在将 中断标志设置为true后,还会有如下三种情况之一的操作:
如果是wait、sleep以及jion三个方法引起的阻塞,那么会将线程的中断标志重新设置为false,并抛出一个 InterruptedException;

如果在中断时,线程正处于非阻塞状态,则将中断标志修改为true,而在此基础上,一旦进入阻塞状态,则按照阻塞 状态的情况来进行处理;例如,一个线程在运行状态中,其中断标志被设置为true之后,一旦线程调用了wait、 jion、sleep方法中的一种,立马抛出一个InterruptedException,且中断标志被程序会自动清除,重新设置为 false。
通过上面的分析,我们可以总结,调用线程类的interrupted方法,其本质只是设置该线程的中断标志,将中断标 志设置为true,并根据线程状态决定是否抛出异常。因此,通过interrupted方法真正实现线程的中断原理是:开 发人员根据中断标志的具体值,来决定如何退出线程。
六.守护线程

七.线程优先级

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值