admin管理员组文章数量:1794759
线程
目录
方法1 :继承Thread类,重写run方法,调用 start 方法启动
方法2 :实现Runnable接口,重写run方法,调用 start 方法启动
方法3:匿名内部类 创建Thread 子类对象
方法4:匿名内部类 创建Runnable子类对象
方法5:使用 lambda 表达式 创建Runnable 子类对象
方法6:使用线程池!!! 重点
方法7:使用Callable!!!重点
如果觉得有用,记得三连哦!
方法1 :继承Thread类,重写run方法,调用 start 方法启动
public static void main(String[] args) {class MyThread extends Thread{@Overridepublic void run() {System.out.println("成功创建线程!");}}MyThread thread = new MyThread();thread.start();}
方法2 :实现Runnable接口,重写run方法,调用 start 方法启动
public static void main(String[] args) {class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("成功创建线程!");}}MyRunnable runnable = new MyRunnable();Thread thread = new Thread(runnable,"继承Runnable接口实现");thread.start();}
方法3:匿名内部类 创建Thread 子类对象
public static void main(String[] args) {Thread thread = new Thread(){@Overridepublic void run() {System.out.println("成功创建线程!");}};thread.start();}
方法4:匿名内部类 创建Runnable子类对象
public static void main(String[] args) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("成功创建线程!");}});thread.start();}
方法5:使用 lambda 表达式 创建Runnable 子类对象
public static void main(String[] args) {Thread thread= new Thread(()->{System.out.println("成功创建线程!");});thread.start();}
方法6:使用线程池
创建线程池:
1. 使用 Executors.newFixThreadPool ( ) 创建固定线程数的线程池
2.返回值的类型为 ExecutorService
3. 通过ExecutorsSercvice. submit 可注册一个任务到线程池中
例如:
public static void main(String[] args) {ExecutorService pool = Executors.newFixedThreadPool(10);pool.submit(()->{System.out.println("一个在 线程池 中的线程 创建完成!");});}
Executors 创建线程线程池的一些方式(工厂方法):
1. newFixedThreadPool 创建固定线程数的线程池
2. newCachedThreadPool 创建线程数动态增长的线程池
3. newSingleThreadExecutor 创建只包含一个线程的线程池
4. newScheduledThreadPool 设定延迟时间后执行命令,或者定期执行(增强版的Timer)
方法7:使用Callable
什么是Callable?(带返回值的Runnable)
都是描述一个"任务" ,但是Callable 带有返回值,Runnable不带返回值。Callable 也是一个 interface。相当于把线程封装了一个“返回值”,方便程序员 借助多线程计算结果。
Callable 通常搭配 FutureTask 使用,FutureTask 的作用是用来保存Callable的返回值。FutureTask负责等待这个结果出来,但其实啥时候出来结果是不确定的(FutureTask就相当于我们点餐时候,收银员给的一个小票,Callable在后台做食物,我们拿着小票去领)
例子:创建线程计算1+2+3+4+ .......+1000
public static void main(String[] args) throws ExecutionException, InterruptedException {//1.创建一个 callable 相当于 Runnable,但有了返回值 sumCallable<Integer> callable = new Callable<Integer>() {@Overridepublic Integer call() throws Exception {int sum = 0;for (int i = 1; i <= 1000; i++) {sum += i;}return sum;}};//2. 创建一个FutureTask,task用来接收返回值//这里的返回值就相当于一个小票!即便这里的相加还没有开始FutureTask task = new FutureTask(callable);//3. 创建一个线程开始工作!进行相加!Thread t = new Thread(task);t.start();//4. 线程里的 Callable 任务完成!返回值被赋给 task//可以通过 task 里的 get() 方法获取到返回值!System.out.println(task.get());}
本文标签: 线程
版权声明:本文标题:线程 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1707266514a546233.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论