java并发编程

55 阅读1分钟

1.首先Java要想实现多线程的编程,第一步肯定是要创建线程类,最简单的就是直接继承Thread类,如下:

public class Person extends Thread {
    //继承类后是要重写父类的方法的。加上注解的意义就是可以让系统检查重写的run()方法有没有错误。
    @Override
    public void run() {
        try {
            System.out.println(getName() + " 开始取钱");
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(getName() + " 取钱完毕");
        //Thread类里面清楚的定义了Name属性,并且Name是volatile(即可变的,用于多个线程进行修改),主要还是为了方便辨别哪个线程类在运行。
    }
}

第二步就应该运行线程类,运行线程类则就是需要调用Thread里面的start()方法了,由于run()方法本来其实是空的,里面的任务是我们自己写的,所以我们调用start()方法就是调用run()里面的任务。

public class Bank {
    public static void main(String[] args) {
        Person thread1 = new Person();
        thread1.setName("张三");

        Person thread2 = new Person();
        thread2.setName("李四");

        thread1.start();
        thread2.start();
    }
}

2.继承Thread类的弊端太大,因为java是单继承,这样一来扩展性显得非常小,所以我们可以实现Runnable接口,直接看代码:

public class Person implements Runnable {
    //因为Runnable接口里面只有一个空的run()方法,所以我们还需要创建name成员变量。
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        try {
            System.out.println(name + " 开始取钱");
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(name + " 取钱完毕");
    }
}

接下来就应该调用run()方法里面的任务了,直接创建Thread实例化对象调用静态方法start(),代码如下:

public class Bank {
    public static void main(String[] args) {
        Person person1 = new Person();
        person1.setName("张三");
        Thread thread1 = new Thread(person1);

        Person person2 = new Person();
        person2.setName("李四");
        Thread thread2 = new Thread(person2);

        thread1.start();
        thread2.start();
    }
}