Java实现多线程的三种方法
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口,这JUC并发包下的,属于比较高级的用法
一:继承Thread类的步骤:
- 继承Thread类
- 重写run方法
- 调用start方法启动多线程.run是普通方法,只有调用start()方法才能启动多线程。
注意事项:Thread类里面的run()方法没有返回值,有异常不能Throw只能try-catch
代码示例:
以下只是简单例子,这个例子里面存在着同步的问题。
public class ThreadDemo { public static void main(String[] args) { System.out.println("一边听音乐..."); Thread p1=new Person(); p1.start(); } } class Person extends Thread{ @Override public void run() { System.out.println("一边写代码..."); } }
示例二:
模拟火车票售票系统
public class ThreadDemo { public static void main(String[] args) { for (int i = 0; i < 5; i++) { new Ticket().start(); } } } class Ticket extends Thread { private static int ticketNum = 20; @Override public void run() { while (ticketNum > 0) { System.out.println(this.getName() + "正在售第" + (ticketNum--) + "张票!"); } } }
运行结果:可以看到同一张票被重复销售了。
Thread-1正在售第20张票! Thread-3正在售第17张票! Thread-0正在售第20张票! Thread-2正在售第18张票! Thread-4正在售第19张票!
以后会改进这个程序。
重要参考:
https://www.cnblogs.com/alltoforever/p/10054686.html
这个post展示了如何解决模拟火车票售票的线程安全问题