同步:排队执行,效率低但安全
异步:同时执行,效率高但数据不安全
线程阻塞:所有耗时操作
Thread :
new Thread (Runnable target,String name); //参数:任务,线程名称
线程类,继承Thread 类 重写 run(),通过start()方法启动。
每个线程都有自己的栈空间,共用一份堆内存。
优点:简单方便,可以匿名内部类
方法:
void start() 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
void run() 如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
final void setName(String name) 改变线程名称
String getName() 获取线程名称
final void setPriority(int priority) 更改线程的优先级。
final void setDaemon(boolean on) 将该线程标记为守护线程或用户线程
static void sleep(long millisec) 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
static Thread currentThread() 返回对当前正在执行的线程对象(的引用)。
线程的中断:
线程.interrupt(); //添加线程中断标记
try { sleep、wait } catch(InterruptedException e){ return;}
守护线程和用户线程:
t1.setDaemon(true); //t1设置为守护线程,主线程死它也死
ti.start();
runnable:
任务类,实现Runnable接口,重写run()方法. (Thread 的start方法也是调用这个run启动的)
创建任务对象,作为Thread对象的参数(任务交给线程执行)
优点:
1、通过创建任务,然后给线程分配的方式来实现的多线程,适合多个线程同时执行相同任务
2、Runnable是接口,避免单继承
3、任务与线程分开,提高了程序的健壮性
4、线程池技术只接受Runnable类型任务,不接收Thread类型的线程