Java:多线程基础(1)
实现多线程的两种方式
1.继承Thread类
1 public class myThread extends Thread { 2 /** 3 * 继承Thread类,重写RUN方法。 4 */ 5 @Override 6 public void run() { 7 super.run(); 8 } 9 }
【说明】
- 由于Java继承机制,此处不再支持多继承。
2.实现Runnable接口
1 class myRunable implements Runnable 2 { 3 /** 4 * 实现Runnable接口,实现RUN方法 5 */ 6 @Override 7 public void run() { 8 9 } 10 }
3.启用线程
1 public static void main(String[] args) { 2 myThread aThread = new myThread(); 3 aThread.start(); 4 5 myRunnable aRunnable = new myRunnable(); 6 Thread bThread = new Thread(aRunnable); 7 bThread.start(); 8 }
共享数据及线程安全
多个线程访问同一个变量的错误实例
使用synchronized关键字加锁
currentThread()方法
isAlive()方法
sleep()方法
停止线程
暂停线程
yield方法
线程的优先级
在Java中,线程的优先级分为1~10:Java中使用三个预定义的优先级值
1 public static final int MIN_PRIORITY = 1; 2 public static final int NORM_PRIORITY = 5; 3 public static final int MAX_PRIORITY = 10;
说明:
- 优先级具有继承性,如果A线程qi dong B xian cheng,ze B xian cheng you xian ji yu A xian cheng shi yi yang de .
- youxianjijuyouguizexing
- youxianjijuyousuijixing
守护线程
守护线程,是一种特殊的线程,他的特性有陪伴的含义,当进程中不存在非守护线程了,则守护线程自动销毁。
守护线程的作用是为其他线程的运行提供便利服务,最典型的应用就是GC(垃圾回收器),它是一个很称职的守护者。
守护进程:
1 public class DaemonThread extends Thread { 2 private int i=10; 3 @Override 4 public void run() { 5 while (true) 6 { 7 System.out.println(i--); 8 try { 9 Thread.sleep(1000); 10 } catch (InterruptedException e) { 11 e.printStackTrace(); 12 } 13 } 14 } 15 }
测试方法:
1 @Test 2 public void testDaemon() throws Exception { 3 DaemonThread daemonThread = new DaemonThread(); 4 daemonThread.setDaemon(true); 5 daemonThread.start(); 6 Thread.sleep(5000); 7 System.out.println("我离开守护进程也就不再打印了!"); 8 }