1. /***************************继承Thread类创建多线程************************/
  2. public class FirstThread extends Thread{
  3. private int i;//继承Thread创建线程不共享实例变量
  4. public void run()
  5. {
  6. for (; i < 10; i++) {
  7. System.out.println(getName()+" "+i);//通过this.getName()获得线程名称
  8. }
  9. }
  10. public static void main(String[] args)
  11. {
  12. for (int i = 0; i < 100; i++) {
  13. System.out.println(Thread.currentThread().getName()+" "+ i);
  14. if(i == 20)
  15. {
  16. new FirstThread().start();
  17. new FirstThread().start();
  18. }
  19. }
  20.  
  21. }
  22. }
  1. /************************实现Runnable接口创建多线程*************************/
  2. public class SecondThread implements Runnable
  3. {
  4. private int i;//继承Runnable接口共享实例变量
  5. public void run()
  6. {
  7. for(;i < 100; i++)
  8. {
  9. System.out.println(Thread.currentThread().getName()+" "+i);
  10. }
  11. }
  12. public static void main(String[] args) {
  13. for (int i = 0; i < 100; i++) {//继承Runnable接口要通过Tread.currentThread()获得当前进程
  14. System.out.println(Thread.currentThread().getName()+" "+i);
  15. if(i == 20)
  16. {
  17. SecondThread st = new SecondThread();//Runnable对象作为Thread对象的target
  18. new Thread(st, "新线程1").start();
  19. new Thread(st, "新线程2").start();
  20. }
  21. }
  22. }
  23. }
  1. /************************使用Callable和Future创建线程********************************/
  2. import java.util.concurrent.Callable;
  3. import java.util.concurrent.FutureTask;
  4. public class ThirdThread {
  5. public static void main(String[] args)
  6. { //FutureTask类包装了Callable对象,封装了Callable对象的call()方法。
  7. //call()方法可以有返回值,也可以声明抛出异常。
  8. FutureTask<Integer> task = new FutureTask<Integer>((Callable<Integer>)()->{
  9. int i = 0;
  10. for(; i < 100; i ++)
  11. {
  12. System.out.println(Thread.currentThread().getName()+" 的循环变量i的值:"+i);
  13. }
  14. return i;
  15. });
  16.  
  17. for (int i = 0; i < 100 ; i++) {
  18. System.out.println(Thread.currentThread().getName()+" 的循环变量的值:"+i);
  19. if(i == 20)
  20. {
  21. new Thread(task, "有返回值的线程").start();//task作为Thread类的target
  22. }
  23. }
  24. try
  25. {
  26. System.out.println("子线程的返回值:" + task.get());//get()获取返回值
  27. }
  28. catch(Exception e)
  29. {
  30. e.printStackTrace();
  31. }
  32. }
  33. }

java创建多线程的三种方式的更多相关文章

  1. Java并发编程:Java创建线程的三种方式

    目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...

  2. java创建线程的三种方式及其对比

    第一种方法:继承Thread类,重写run()方法,run()方法代表线程要执行的任务.第二种方法:实现Runnable接口,重写run()方法,run()方法代表线程要执行的任务.第三种方法:实现c ...

  3. AJPFX总结java创建线程的三种方式及其对比

    Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行 ...

  4. java创建线程的三种方式及其对照

    Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类.并重写该类的run方法,该run方法的方法体就代表了线程要完毕的任务.因此把run()方法称为运行 ...

  5. Java创建多线程的三种方法

    Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没 ...

  6. Java实现多线程的三种方式

    Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.前两种方式启动的线程没有返回值 ...

  7. Java创建线程的三种方式

    一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...

  8. [JAVA]JAVA实现多线程的三种方式

    1.继承Thread类,通过start()方法调用 public class MultiThreadByExtends extends Thread { @Override public void r ...

  9. Java 实现多线程的三种方式

    import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class Main { pu ...

随机推荐

  1. SpringBoot自带热加载开发工具

    SpringBoot自带热加载开发工具 maven配置: <!-- SpringBoot自带热加载开发工具 --> <dependency> <groupId>or ...

  2. 如何用 JavaScript 控制 Arduino?

    Arduino 运行 C 语言,而主控端运行 JavaScript,一次要编写和维护两种程序.既然浏览器和服务器都用 JavaScript,若 Arduino 也能用 JavaScript 控制,那岂 ...

  3. git 中 A C D M R T U X 分别解释

    git 中 A C D M R T U X 分别解释 - CSDN博客 https://blog.csdn.net/adminyan/article/details/64922979 A: 你本地新增 ...

  4. cron_action

    crontab   using shell script to automate linux system maintenance tasks Linux中用crontab例行工作安排_Linux教程 ...

  5. 解决Raize日历控件显示的问题

    解决Raize日历控件显示的问题 近自己的程序被测试人员发现一个小问题,就是程序中的日历选择框,显示中的“星期一.星期二....”都显示成了“星.....”,我自己看了代码,原来是raize的控件问题 ...

  6. android开发 软键盘出现后 防止EditText控件遮挡 总体平移UI

    在EditText控件接近底部的情况下 软键盘弹出后会把获得焦点的EditText控件遮挡 无法看到输入信息  防止这种情况发生 就须要设置AndroidManifest.xml的属性 前面的xml信 ...

  7. 004-ibus输入法,快捷键,浏览器

    一.输入法 用 root 身份在终端下,运行下面命令: yum install ibus-pinyin ibus ibus-gtk ibus-qt 使用im-chooser命令,选择ibus为默认输入 ...

  8. 20170411 F-02创建财务凭证

    SAPMF05A 100 X       0   BDC_OKCODE /00   0   BKPF-BLDAT 20170411   0   BKPF-BLART SA   0   BKPF-BUK ...

  9. C语言转义字符的使用方法

    cppreference.com -> 转义字符 常量转义字符 以下的转义字符使普通字符表示不同的意义. 转义字符 描述 \' 单引号 \" 双引号 \\ 反斜杠 \0 空字符 \a ...

  10. 备注字段长度控制JS

    //变更原因备注字符长度控制 function checkChangeLength() { var field = $("#changeReasonDesc").val(); ma ...