Java多线程实现

java实现多线程

  • 继承 extends java.lang.Thread或其子类
    1. 创建多线程 继承Thread
    2. 重写Run()方法
    3. 使用线程 创建Thread的子类对象
    4. 调用子类对象的start()方法

缺点:Java单继承特性,如果已经继承其他类,则不能再继承Thread类。

/**
 * 创建多线程:继承Thread 重写run()
 */
public class ThreadTest extends Thread{
	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			System.out.println("i:"+i);
		}
	}
}

public class TestMain {
	public static void main(String[] args) {
		ThreadTest ts=new ThreadTest(); //创建子类对象
		ts.start();//调用start()
	}
}

  • 通过实现Runnable接口 实现多线程。
    1. 实现Runnable接口
    2. 重写Run()方法
    3. 使用Start()方法

优点:可以同时实现继承。

//实现了java.lang.Runnable接口
public class MyRunnable implements Runnable {
   public void run(){
    System.out.println("MyRunnable running");
   }
}

//为了使线程能够执行run()方法,需要在Thread类的构造函数中传入 MyRunnable的实例对象
Thread thread = new Thread(new MyRunnable());
thread.start();

//当创建一个线程的时候,可以给线程起一个名字.
MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable, "New Thread");
thread.start();
System.out.println(thread.getName());

//得到当前线程的引用
Thread.currentThread();
//得到当前线程的名字
String threadName = Thread.currentThread().getName();

//输出执行main()方法线程名字。这个线程JVM分配的。然后开启10个线程,命名为1~10。每个线程输出自己的名字后就退出。

public class ThreadExample {
  public static void main(String[] args){
     System.out.println(Thread.currentThread().getName());
      for(int i=0; i<10; i++){
         new Thread("" + i){
            public void run(){
             System.out.println("Thread: " + getName() + "running");
            }
         }.start();
      }
  }
}


通过实现callable接口 实现多线程
1. 创建callable实现类+重写call
2. 借助执行调度服务 ExecutorService 获取Future对象
ExecutorService ser=Executors.newFixedThreadPool(2);
Future future =ser.submit(task:实现类对象);、
3. 获取值 future.get();
4. 停止服务 ser.shutdownNow();
使用callable 创建线程比较繁琐。

Runnable和Callable的区别是:

  1. Callable规定的方法是call(),Runnable规定的方法是run()。其中Runnable可以提交给Thread来包装下,直接启动一个线程来执行,而Callable则一般都是提交给ExecuteService来执行。
  2. Callable的任务执行后可返回值,而Runnable的任务是不能返回值得
  3. call方法可以抛出异常,run方法不可以
  4. 运行Callable任务可以拿到一个Future对象,c表示异步计算的结果。

Runnable和Callable的区别 参考https://blog.csdn.net/qq_27258799/article/details/51451143

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EngineerForSoul

你的鼓励是我孜孜不倦的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值