/*实现Runnable接口*/ private class UseRun implements Runnable{ @Override public void run() { System.out.println("I am implements Runnable"); } public static void main(String[] args) { UseRun useRun = new UseRun(); new Thread(useRun).start(); } }
/*实现Callable接口,允许有返回值*/ private static class UseCall implements Callable<String>{ @Override public String call() throws Exception { System.out.println("I am implements Callable"); return "CallResult"; } public static void main(String[] args) { //第一步,先new一个类 UseCall useCall = new UseCall(); //第二步,用FutureTask类包装下,注意:FutureTask类继承了Runnable接口 FutureTask<String> futureTask = new FutureTask<>(useCall); //第三步,启动 new Thread(futureTask).start(); //第四步,得到线程返回的结果,注意这里是阻塞式的。必须执行完线程才能拿到结果 System.out.println(futureTask.get()); } }
public class MyThread extends Thread{//继承Thread类 public void run(){ //重写run方法 } } public class Main { public static void main(String[] args){ new MyThread().start();//创建并启动线程 } }
怎么样才能让Java里的线程安全停止工作呢?
线程自然终止:自然执行完或抛出未处理异常,
stop() (停止线程),resume() (继续执行线程), suspend() (挂起线程 ) 已不建议使用,stop()会导致线程不会正确释放资源,suspend()容易导致死锁。
java线程是协作式,而非抢占式
方法里如果抛出InterruptedException,线程的中断标志位会被复位成false,如果确实是需要中断线程,要求我们自己在catch语句块里再次调用interrupt()。
原文:https://www.cnblogs.com/coder-lzh/p/10646314.html