源代码:
public class java0511 {
public static class Bank {
private int rest = 10000;
void deposit() {
for (int i = 0; i < 12; i++) {
rest = rest + 5000;
System.out.println(Thread.currentThread().getName() + " 2020." + (i + 1) + ": +5000");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
void withdraw() {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < 12; i++) {
rest = rest - 2000;
System.out.println(Thread.currentThread().getName() + " 2020." + (i + 1) + ": -2000");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("rest:" + rest);
}
public static void main(String[] args) {
Bank bank = new Bank();
Thread cunqian = new Thread(new Runnable() {
@Override
public void run() {
bank.deposit();
}
}, "Thread1");
Thread quqian = new Thread(new Runnable() {
@Override
public void run() {
bank.withdraw();
}
}, "Thread2");
cunqian.start();
quqian.start();
}
}
}
运行结果:
实现多线程的两种方法:
1、继承Thread类
- 子类继承Thread类具备多线程能力
- 启动线程:子类对象.start( )
- 一般不建议使用:避免OOP单继承局限性
2、实现Runnable接口
- 实现接口Runnable具有多线程能力
- 启动线程:传入目标对象+Thread对象.start( )
- 推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用。
实现Runnable:
- 定义MyRunnable类实现Runnable接口
- 实现run( )方法,编写线程执行体
- 创建线程对象,调用start( )方法启动线程
两种对比: