Java 多线程入门
来源:互联网 发布:行业研究员工资 知乎 编辑:程序博客网 时间:2024/05/01 19:29
一。java创建线程的两种方式。
java创建线程有两种方式:1.继承Thread类,重写run()。2.实现Runnable接口,重写run()。下面分别看代码:
public class MyThread extends Thread {@Overridepublic void run() { System.out.println("Hello Thread!");}}
实现Runnable接口:
public class MyThread implements Runnable { @Overridepublic void run() { System.out.println("Hello Thread!");}}
接下来,跑一下试试:
public static void main(String[] args) {Thread t = new MyThread();t.start(); //t.run(); //请不要这样,这样还是一个线程。要启动一个线程,调用start()方法。至于原因,请看jdk的源码}
二。jdk5提供的线程池
从jdk5开始,提供了java.util.concurrent包,提供了几个线程池。下面看用法:
ExecuteService exec = Executors.newCachedThreadPool();//产生线程数,与所需的数量一致。exec.execute(new MyThread()); //自己定义的Runnable对象 exec.shutdown(); //必须关闭已回收资源
除了CachedThreadPool外,jdk还提供了SingleThreadExecutor,用于产生单一线程,如果您有多个任务,使用此线程池时,这些任务将排队。
还有FixedThreadPool,产生固定数量的线程。
如果您要从任务(线程)中产生返回值,怎么办? Runnable的run()方法是没有返回值的,怎么做呢?
jdk5提供了Callable接口,和Future类,我们看看用法:
public class ThreadWithResult implements Callable<String> {@overridepublic String call() { return "hi, result!";}public static void main(String[] args) {ExecuteService exec = Executors.newCachedThreadPool();Future future = exec.submit(new ThreadWithResult()); //不在使用execute(),使用submit(),返回future对象System.out.println(future.get());}}
三。异常捕获
话不多说,直接上代码:
class MyThread implements Runnable {public void run() {//...throw new RunntimeException();}public static void main(String[] args) {Thread t = new Thread(new MyThread());t.setUncaughtExceptionHandler(new MyThreadExceptionHandler()); //设置异常捕获器t.start();}}//异常捕获器类class MyThreadExceptionHandler implements Thread.UncaughtExceptionHandler {@Overridepublic void uncaughtException(Thread t, Throwable e) {System.out.println(t.getName());e.printStackTrance();}}
- Java 多线程入门大全
- Java多线程程序设计入门
- Java多线程程序设计入门
- Java多线程入门
- Java多线程程序设计入门
- Java多线程程序设计入门
- Java多线程程序设计入门
- Java多线程入门
- Java多线程程序设计入门
- Java多线程程序设计入门
- java 多线程入门
- Java多线程程序设计入门
- Java多线程程序设计入门
- Java多线程程序设计入门
- Java多线程程序设计入门
- Java多线程程序设计入门
- Java多线程程序设计入门
- Java 多线程入门
- 今天写些有用的,关于学习的,和关于40期项目读后感的一些想法
- 第二个项目总结以及后感
- “微”谈一个深层创建目录的问题
- 工作学习至于品读人生-两碗牛肉面
- 消灭IF
- Java 多线程入门
- 模拟系统函数array_map
- 新的我们、新的梦想、新的目标、新的未来 —— 44期开班贴
- 【php夜未眠之理想与奋斗:第一季】
- Sphinx速成指南
- 【无兄弟不编程,无编程不兄弟!】
- Qt托盘程序的实现
- 【小小论】
- 【前台布局】来的晚了一些