Java线程有两种基础创建方式
1.继承Thread类,重写run方法(其实Thread类本身也实现了Runnable接口,而且不复写run不会报错,这样容易出错)
extends Thread
2、实现Runnable接口(推荐使用的方法),实现接口必须复写run方法
implements Runnable
Java线程有两种启动方式
1、start启动
UdpReceiveThread thread1 = new UdpReceiveThread();
Thread thread=new Thread(thread1);
thread.start();
2、run启动
UdpReceiveThread thread1 = new UdpReceiveThread();
thread1.run();
备注:选择哪种方式启动呢?
多线程必须使用start启动,因为run方法是普通方法,是阻塞的,依次启动
实际验证如下:
结果是依次执行
Thread操作线程已经有很多的方法,比如
线程的中断
thread.interrupt();
中断线程的恢复(注意这个编译器是没有提示的,这是共有静态方法 public static )
thread.interrupted();
线程的等待(一般使用sleep())
thread.wait(1000);
Thread.sleep(1000);
wait() 是 Object 类的方法,会释放对象锁,并让出 CPU 资源。只能在 synchronized 下使用,使用 notify() 或 notiftAll() 唤醒。notify()唤醒也是随机唤醒一个等待的线程
sleep()是 Thread 类的静态方法,一般只会让出 CPU 资源。可以使低优先级的线程得到执行的机会。
线程的终止
一般不会使用到,一般线程自动执行完,或者永远的执行下去,但是我们有时候需要结束呢?
推荐的方法,使用标记
线程定义
public volatile boolean exit = false;
线程里面
if(exit) break;
调用的时候(注意对象是你的对象不是Thread对象)
thread1.exit=true;