java 多线程
Java VM 启动的时候会有一个java.exe
该进程中至少有一个线程负责java程序的执行,而且这个线程运行的代码存在于main()方法中,该线程称为主线程。
jvm启动不止一个线程,还有负责垃圾回收机制的线程。
自定义线程:
继承Thread类,复写run方法,创建对象,start调用。
run方法用于存储线程要运行的代码。
调用run()和start()方法的区别,run只是简单的对象调用方法,创建了线程没有运行,start()是开启线程运行代码。
线程运行状态:

获取线程对象名称:Thread.currentThread().getName()
Thread.currentThread() this
currentThread():获取当前线程对象
getName():获取线程名称
创建线程的第二种方法:
实现Runnable接口
1.定义类实现Runnable接口
2.覆盖Runnable接口中的run方法
3.通过Thread建立线程对象
4.将Runnable接口的子类对象作为实际参数传递给Thread类的构造方法
5.调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
案例卖票:
多个窗口提示售票,但是不能重复售票
方法一:总的票数不变,共享总票数。
class Ticket extends Thread{ private static int tick=100; @Override public void run() { while (true){ if (tick>0){ System.out.println(currentThread().getName()+"...sale:"+tick--); } } } } public class Demo { public static void main(String[] args) { Ticket t1 = new Ticket(); Ticket t2 = new Ticket(); t1.start(); t2.start(); } }
方法二:通过接口方式(推荐)
class Ticket implements Runnable{ private int tick=100; @Override public void run() { while (true){ if (tick>0){ System.out.println(Thread.currentThread().getName()+"...sale:"+tick--); } } } } public class Demo { public static void main(String[] args) { Ticket t = new Ticket(); Thread t1 = new Thread(t); Thread t2 = new Thread(t); t1.start(); t2.start(); } }
区别:
继承Thread方法线程代码存放在Thread子类的run方法中。
实现Runnable线程代码存放在接口的子类的run方法中。

浙公网安备 33010602011771号