1.设立线程优先级:线程10个优先级由1-10 可以采用 Priority()方法来进行设置
min.setPriority(Thread.min_PRIORITY); 为线程时间片最小。max.setPpriority((Thread.maxPRIORITY);为线程时间片最大。 Thread.yield()代表线程放弃了时间片
2.获取当前运行该方法的线程:currentThread 例如:Thread t = Thread.currentThread();
3.线程的等待(睡眠):sleep : Thread.sleep(时间为毫秒计算);
4.守护线程:DaemonThread :设置守护线程是必须得在被守护的运行之前设置, 例如 rose.start() t.setDaemon(true). t.start() 此时rose线程结束,t也结束。
5.同步块(同步锁):synchronized 设置同步可以避免多个线程之间的相互碰撞 可以强迫一个一个的运行
public class SyncDemo4 { public static void main(String[] args) { Boo boo = new Boo(); Thread t1 = new Thread(){ public void run(){ boo.methodA(); } }; Thread t2 = new Thread(){ public void run(){ boo.methodB(); } }; t1.start();t2.start(); }} class Boo{ public synchronized void methodA(){//this Thread t = Thread.currentThread(); System.out.println(t.getName()+":正在执行A方法..."); try { Thread.sleep(5000); } catch (InterruptedException e) { } System.out.println(t.getName()+":执行A方法完毕!"); } public void methodB(){ synchronized (this) { Thread t = Thread.currentThread(); System.out.println(t.getName() + ":正在执行B方法..."); try { Thread.sleep(5000); } catch (InterruptedException e) { }System.out.println(t.getName() + ":执行B方法完毕!"); } }}
6.线程池ExecutorService:可以控制线程的数量,重复的使用线程。例子中有三个去完成run()方法这样会有三个线程争夺时间片去完成run()方法
public class ThreadPoolDemo { public static void main(String[] args) { //1创建一个容量为3的线程池 相当于设立了三个线程来完成run()方法 ExecutorService threadPool = Executors.newFixedThreadPool(3); //2指派任务 for(int i=0;i<5;i++){ Runnable r = new Runnable() { public void run() { Thread t = Thread.currentThread(); System.out.println(t.getName()+":正在执行任务..."); try { Thread.sleep(5000); } catch (InterruptedException e) {} System.out.println(t.getName()+":任务执行完毕!!!"); }}; threadPool.execute(r); System.out.println("指派了一个任务给线程池"); } }}