标签:while 资源 支持 suspend new t main nbsp size call()
public static class MyThread extends Thread{ @Override public void run(){ System.out.println("继承Thread"); } }
public static class UseRunnable implements Runnable { @Override public void run() { System.out.println("i am runbable impl"); } }
public static class UseCall implements Callable<String> { @Override public String call() throws Exception { return "Callable"; } }
public static void main(String[] args) { UseRunnable useRunnable = new UseRunnable(); new Thread(useRunnable).start(); /** *因为 Tread 源码中,不直接支持callable的方式,因此直接传入callable 是报错 *new Thread(useCall).start(); *以下为源码 * public Thread(Runnable target) { * init(null, target, "Thread-" + nextThreadNum(), 0); *} */ UseCall useCall = new UseCall(); FutureTask<String> futureTask = new FutureTask<>(useCall); new Thread(futureTask).start(); String s = null;//就是callable 的返回 try { s = futureTask.get(); //get方法是阻塞的 } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } System.out.println(s); }
注:几个线程的创建类,都用了static,是为了让我在main方法中使用
public static class EndThread extends Thread { public EndThread(String name) { super(name); } @Override public void run() { String threadName = Thread.currentThread().getName(); // while (true){ //如果此处 不对标记位进行处理 则不会中断 // System.out.println(String.format("线程【%S】,正在运行",threadName)); // // } while (!interrupted()) { //如果此处 不对标记位进行处理 则不会中断 System.out.println(String.format("线程【%S】,正在运行", threadName)); } System.out.println(String.format("线程【%S】的中断状态%S", threadName, interrupted())); } }
/** * interrupted() 等方法是在Thread中存在,Runnable中不存在 * 下面演示如何在runnable中使用 */ public static class EndAble implements Runnable{ @Override public void run() { String threadName = Thread.currentThread().getName(); while (!Thread.currentThread().isInterrupted()) { //如果此处 不对标记位进行处理 则不会中断 System.out.println(String.format("线程【%S】,正在运行", threadName)); } System.out.println(String.format("线程【%S】的中断状态%S", threadName, Thread.interrupted())); } }
public static void main(String[] args) { Thread endThread = new EndThread("endThread"); endThread.start(); try { Thread.sleep(2000); //停止是为了,监控中断状态 endThread.interrupt(); } catch (InterruptedException e) { e.printStackTrace(); } }
线程【ENDTHREAD】,正在运行
线程【ENDTHREAD】,正在运行
线程【ENDTHREAD】,正在运行
线程【ENDTHREAD】,正在运行
线程【ENDTHREAD】,正在运行
线程【ENDTHREAD】,正在运行
线程【ENDTHREAD】,正在运行
线程【ENDTHREAD】,正在运行
线程【ENDTHREAD】,正在运行
线程【ENDTHREAD】,正在运行
线程【ENDTHREAD】,正在运行
线程【ENDTHREAD】的中断状态FALSE
标签:while 资源 支持 suspend new t main nbsp size call()
原文地址:https://www.cnblogs.com/JavaHxm/p/13626102.html