线程
创建new、启动strat()、执行run()、设置守护setDaemon(true)、设置优先级setPriority(int k)、等待join()join执行的线程死亡其他线程才执行、暂停sleep(long millis)等操作的整理。
1、Thread类
(1)继承Thread可定义新的Thread类;
Thread name = new Thread ();
Name.Start();启动线程;
Run()封装在Thread类的执行方法。
线程通过start()开启,执行的是run()。
例如:
自定义线程的声明:public class ThreadSleep extends Thread
构建:ThreadSleep ts1 = new ThreadSleep();
(2)通过runnable接口构建线程
例如:
自定义线程的声明:public class SellTicketLock implements Runnable
构建:SellTicket st = new SellTicket();
Thread t1 = new Thread(st,"name");//name为当前接口的名字
2、ThreadDaemon类(自定义类,继承Thread,重写run()方法):
public void run() {
for(int i= 0; i < 100; i++) {
System.out.println(getName()+":"+i);
}
}//便于输出线程的结果,run的设置根据项目的需求而定
创建格式:type name = new type();
例如:ThreadDaemon ts1 = new ThreadDaemon();
(1)void setDaemon(boolean on):将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机退出。
(2)ts1.setName("关羽");设置线程的名称
(3)Thread.currentThread().setName("刘备"):设置当前线程的名称
(4)ts1.setDaemon(true)设置ts1为当前ThreadDaemon的守护线程,即当前线程消亡,ts1随即消亡。
(5)ts1.start();启动线程(最后一步)
(6)Thread.currentThread().getName():返回线程当前的名称;
3、ThreadJoinDemo类(自定义类,继承Thread,重写run()方法)
创建:ThreadJoin ts1 = new ThreadJoin();
ts1.join();等待整个ts1的死亡,死亡后其他线程才开始运行,先写ts1.start()再有join(),再把其他的线程start()启动;
4、ThreadPriority
创建:ThreadPriority tp1 = new ThreadPriority();
(1)返回线程的最大(最小)(当前)优先级:
Thread.MAX (MIN)(NORM) _PRIORITY
(2)tp1.setPriority(int k);设置tp1的线程优先级为k,优先级越高的线程先执行。
5、ThreadSleep
static void sleep(long millis)使当前执行的线程停留(暂停执行)指定的毫秒数;sleep写在自定义Thread继承类ThreadSleep的run()方法中,例如:
public void run() {
for(int i= 0; i < 100; i++) {
System.out.println(getName()+":"+i);
try
{
Thread.sleep(1000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
注意:sleep()通常会出现异常,需要配合try-catch使用。
6、lock()死锁
private Lock lock = new ReentrantLock();
lock.lock();//加lock锁
lock.unlock();//释放锁
注意:lock()通常写在线程类的run()中,且最后必须释放unlock(),若配合sleep()使用,需要用try-catch-finally使用,lock()写在try中,unlock()写在finally中。
7、synchronized(obj)进程同步
synchronized(obj){代码块};//表示这段代码安全,线程安全
线程同步代码块相当于给线程枷锁,让抢占到cpu的线程得等待上一个线程的运行结束,解决了数据安全问题。
Public synchronized void 方法名():方法名前加同步,表示安全。
(1)把不安全的类变成安全的类:
安全类:打开类的声明,若方法前有synchronized表示为安全类。
Type name = collections.synchronizedList(new type()(可更换类))
例如: List<String> name = collections.synchronizedList(new ArrayList<String>());