java多线程的创建几种方式

  • 并行:在同一时刻,有多个指令在多个CPU上同时执行。

  • 并发:在同一时刻,有多个指令在单个CPU上交替执行。
  • 线程:是进程中的单个顺序控制流,是一条执行路径
    单线程:一个进程如果只有一条执行路径,则称为单线程程序
    多线程:一个进程如果有多条执行路径,则称为多线程程序
方法名说明
void run() 在线程开启后,此方法将被调用执行
void start() 使此线程开始执行,Java虚拟机会调用run方法()

创建多线程的方式:

第一种:继承Thread类

1、定义一个类MyThread继承Thread类
2、在MyThread类中重写run()方法
3、创建MyThread类的对象
4、调用start()方法,启动线程

/**
* 继承Thread创建线程
*/
public class ThreadDemo3 {
public static void main(String[] args) {
//获得当前线程
Thread mainThread = Thread.currentThread();
System.out.println("线程名称" + mainThread.getName());

Thread thread = new MyThread();
//开启线程
thread.start();
}
}

 


class MyThread extends Thread{
@Override
public void run() {
//具体的业务执行代码
Thread thread = Thread.currentThread();
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
System.out.println( "线程的名称"+ thread.getName());
}
}

第二种:实现Runnable接口

class MyThread2 implements Runnable{
    @Override
    public void run() {
        //具体的业务代码
        Thread thread = Thread.currentThread();//得到当前线程
        System.out.println("线程执行:" + thread.getName());
    }
}



/**
* 实现Runnable接口线程
*/

public class ThreadDemo4 {
public static void main(String[] args) {
//创建Runnable
MyThread2 myThread2 = new MyThread2();
//创建一个线程
Thread thread = new Thread(myThread2);
//启动线程
thread.start();
}
}

 

第三种:使用内部类(利用Runnable接口)

/**
 * 匿名内部类
 */
public class ThreadDemo5 {
    public static void main(String[] args) {
        //创建一个线程
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                //业务代码
                Thread t = Thread.currentThread();
                System.out.println("执行任务" + t.getName());
            }
        });
        //启动线程
        thread.start();
    }
}

第四种:利用lambda

Thread thread=new Thread(
                  ()->{
    //业务代码
   System.out.println("在这里可以编写相关代码");
    }
)                        

第五种:实现callable接口

  public class MyCallable implements Callable<String> {
      @Override
      public String call() throws Exception {
          for (int i = 0; i < 100; i++) {
              System.out.println("跟女孩表白" + i);
          }
          //返回值就表示线程运行完毕之后的结果
          return "答应";
      }
  }



public class Demo {


public static void main(String[] args) throws ExecutionException, InterruptedException {
//线程开启之后需要执行里面的call方法
MyCallable mc = new MyCallable();
//可以获取线程执行完毕之后的结果.也可以作为参数传递给Thread对象
FutureTask<String> ft = new FutureTask<>(mc);
//创建线程对象
Thread t1 = new Thread(ft);

//开启线程
t1.start();
String s = ft.get();
System.out.println(s);


}


}

 

 

posted @ 2022-06-13 15:09  逝年的我们  阅读(678)  评论(0编辑  收藏  举报