VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • Java进程线程看着一篇就够了

一.多线程相关的概念
 cpu: 相当于电池
 核数: 相当于充电线
 进程: 相当于工厂
 线程: 相当于工厂里面的机器
 
 一个应用程序就是一个进程(相当于工厂开工),一个进程至少有一个线程(一个工厂至少有一台机器),多线程就是多台机器同时开工。
 多核 就是相当于多条充电线。


 二.实现方法
  2.1继承Thread类  单继承
  实现步骤 创建一个类继承Thread类,重写run方法 + 实例化创建对象 调用start方法
  2.2实现Runnable接口  无返回值任务
  实现步骤 创建一个类实现Runnable接口,重写run方法 + 实例化创建对象,创建Thread对象,调用start方法
  2.3实现Callable接口 有返回值任务
  实现步骤  创建一个类实现 Callable接口,重写call方法,实例化对象,创建FutureTask对象,调用start方法
 好处对比:
实现方法 优缺点
继承Thread类   java是单继承,无法再继承其他的类
实现Runnable接口  

1解决单继承的局限性

2 增强了程序的扩展性,贱到底了程序的耦合性(解耦)

 实现接口,把设置线程的任务和开启线程进行了解耦

实现Callable接口   
复制代码
public class ThreadTest {
    public static void main(String[] args) {
        MyThread1 m1 = new MyThread1("RunableThreadA");
        new Thread(m1).start();
        MyThread2 m4 = new MyThread2("ThreadA");
        m4.start();
        MyThread3 m7 = new MyThread3("CallableThreadA");
        FutureTask<String> futureTask1 = new FutureTask<>(m7);
        new Thread(futureTask1).start();
        try{
            String s = futureTask1.get();
            System.out.println(s);
        }catch (InterruptedException e){
            e.printStackTrace();
        }catch (ExecutionException e){
            e.printStackTrace();
        }
    }
}
复制代码
复制代码
public class MyThread1 implements Runnable {
    private String name;

    public MyThread1(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(this.name + i);
        }
    }
}
复制代码
复制代码
public class MyThread2 extends Thread{
    private String name;

    public MyThread2(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(this.name + i);
        }
    }
}
复制代码
复制代码
public class MyThread3 implements Callable<String> {
    private String name;

    public MyThread3(String name) {
        this.name = name;
    }

    @Override
    public String call() throws Exception {
        for (int i = 0; i < 100; i++) {
            System.out.println(this.name + i);
        }
        return "ZZZZ";
    }
}


复制代码


原文:https://www.cnblogs.com/qcjcode/p/15625896.html

相关教程