线程基本操作

前言:线程神秘而又令人向往,好奇是恋上的第一步,出乎意料有时候又让你懊恼,可能你永远无法真正把握线程的小脾气,总会给你出一点状况,可这就是她的俏皮之处,想要探究更深。

她,状况不多,通常也就是NEW RUNNABLE BLOCKED WAITING TIMEED_WAITING TERMINATED

终止线程:现在很多文章都会提到了线程的安全性。我们先看下线程终止,线程终止根据我们学的直接thread.stop()但是在eclipse以及AS里面都会发现stop方法是一个废除的方法,为什么这个方法会被废除,因为stop方法太过暴力,JDK不想赋予她随时可以被别人暴力停止的把柄,强行把线程停止,会导致数据不一致情况发生。例如使用stop()方法,会直接终止线程,并且会立即释放这个线程所持有的锁,然而这个锁才是用来维持对象一致性的。比如一个线程数据写到一半被终止了,另一个线程并不知道上一个线程还未完成工作,所以就继续写下去,导致数据出错。

解决方法:在进入同步锁之前加判断语句,为true break跳出while,则在while里面运行的线程也停止。

让步yield: Java线程中的Thread.yield( )方法,译为线程让步。顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行,注意是让自己或者其他线程运行,并不是单纯的让给其他线程.yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行!

线程中断:线程中断并不会让线程立即退出,而是给线程发送一个通知,告知目标线程,希望它退出。

Thread.interrupt() 中断线程
boolean Thread.interrupt()  判断是否被中断
static boolean Thread.interrupt()  判断是否被中断,清楚当前中断状态

同上解决方法,判断到如果检测到中断,break跳出循环体。

判断

if(Thread.currentThread().isInterrupted())

等待wait和通知notify: 需要对象调用,对象在该线程调用wait,那么该线程进入object等待队列,直到object调用notity才会随机唤醒一个等待中的线程,notifyall唤醒所有线程。

挂起suspend和继续执行resume:同样作为被废弃的方法,两者为相反操作,线程被挂起后必须等待resume恢复被挂起的线程才能继续执行。

等待线程结束join:等待一个线程结束后再执行,表示对该线程的依赖。

volatile:通知虚拟机不能随便改变该申明的变量,改变需要通知其他线程。

线程组:分门别类管理线程组

代码实例:

public class ThreadGroupName implements Runnable {

    public static void main(String[] args) {

        ThreadGroup tg=new ThreadGroup("PrintGroup");
        Thread t1=new Thread(tg,new ThreadGroupName(),"T1");
        Thread t2=new Thread(tg,new ThreadGroupName(),"T2");
        t1.start();
        t2.start();
        System.out.println(tg.activeCount());
        tg.list();

    }

    @Override
    public void run() {
          String groupName=Thread.currentThread().getThreadGroup().getName()+"-"+Thread.currentThread().getName();
          while (true){
              System.out.println(groupName);
              try {
                  Thread.sleep(3000);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
          }
    }
}

输出为:

守护线程Daemon:系统守护者,当线程指派了守护线程,那么它会完成该程序应该要完成的业务操作。

设置方法

t1.setDaemon();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值