Java多线程(一)线程基础、线程间的共享和协作

2021-02-03 22:16

阅读:654

标签:turn   return   stat   oid   实现   inf   协作式   继承   通过   

通过JVM给我们的入口,可以知道运行期间有几个线程:

ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(false, false);
for (ThreadInfo threadInfo : threadInfos){
System.out.println(threadInfo);
}


一、启动线程的三种方式:
1.继承 Thread
2.实现Runnable接口
3.实现Callable接口(有返回值)

public class NewThread {

private static class UseRun implements Runnable{

@Override
public void run() {
System.out.println("I am implements Runnable");
}

}

private static class UseCall implements Callable{

@Override
public String call() throws Exception {
System.out.println("I am implements Callable");
return "CallResult";
}
}

public static void main(String[] args) throws ExecutionException, InterruptedException {
UseRun useRun = new UseRun();
//Runnable接口能够直接作为Thread的构造参数
Thread thread1 = new Thread(useRun);
UseCall useCall = new UseCall();
//Callable接口不能作为Thread的构造参数
//需要通过FutureTask类的转换,将其转换为Runnable接口
//因为FutureTask实现了Runnable接口
FutureTask futureTask = new FutureTask(useCall);
Thread thread2 = new Thread(futureTask);
thread2.start();
//通过futureTask的get方法得到返回值
     //get方法是一个阻塞方法,一直等到有返回值后才会继续往下走
System.out.println(futureTask.get());
}

}


二、停止线程的三种方式:
1.自然执行完成死亡
2.在没有对异常进行处理时抛出异常会中止线程
3.早期stop()等因为过于强势,无法保证线程资源释放,容易导致死锁的问题‘
4.interrupt():中断一个线程,将中断标志位置为true
  isinterrupted():判定当前线程是否处于中断状态
  static方法interrupted():判定当前线程是否处于中断状态,同时将中断标志位改为False,这是2和3的最主要的区别
由于Java中线程是协作式的,interrupt方法只会通知线程应该中断了,并不会强制中断
目的:为了让每个线程有时间释放占有的资源

Java多线程(一)线程基础、线程间的共享和协作

标签:turn   return   stat   oid   实现   inf   协作式   继承   通过   

原文地址:https://www.cnblogs.com/moxi-moxi/p/12798590.html


评论


亲,登录后才可以留言!