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();
}
}