---------------------- android培训、java培训、期待与您交流! ----------------------
java线程
线程:线程是一个程序里的不同执行路径。
java线程的执行:使用java.lang.Thread类或者是java.lang.Runnable接口编写代码来定义,实例化和启动新线程。
java线程的定义:a 继承java.lang.Thread类 并重写 public void run(){}方法;
b 实现java.lang.Runnable接口复写 void run(){} 方法;
java线程实例化: a 如果扩展java.lang.Thread类的线程,直接用new关键字,既Thread thread = new Thread();
b 若实现的Runnable接口,用Thread的构造方法: Thread(Runnable target),还有些许构造方法,具体可参考api文档。
java线程的启动:用Thread对象的start()方法,如:Thread thread = new Thread(); thread.start();
有个注意:对于java来说,run()方法没有任何特别之处,就像main()方法,它值做新线程调用的方法名,并不能启动一个线程。
写一个简单的小例子:
public class TestThread extends Thread {
public static void main(String[] args) {
TestThread t1 = new TestThread();
TestThread t2 = new TestThread();
t1.start();
t2.start();
}
public void run() {
for(int i=0; i<5; i++) {
System.out.println("thread"+" +"+i);
}
}
}
输出结果:thread +0
thread +1
thread +2
thread +3
thread +4
thread +0
thread +1
thread +2
thread +3
thread +4
线程的状态:线程的状态转换是线程控制的基础。线程的状态分五种:生 ,死,可运行,运行,等待、阻塞。
1 新状态: 线程对象以创建,还没有在其上调用start()方法;
2 可运行状态:当调用start()线程有资格运行,但线程调度程序还没有把它作为线程运行时所处的状态。
3 运行状态: 线程调度程序从可运行线程池中选择一个作为当前线程时所处的状态。
4 等待/阻塞/睡眠:线程有资格运行时的状态。
5 死亡状态:当线程的run()方法运行完成后就认为它以死去。
阻止线程执行:
a) 睡眠(sleep); b) 等待(wait) c)因为需要一个对象的锁定而被阻塞。
sleep方法和wait方法的区别:
1 sleep属Thread类,而wait方法属Object类
2 sleep不需要释放对象锁执行,而wait方法释放锁,可以使其他线程可以使用同步快或方法。
3 sleep不会让出系统资源,它会设定一个时间的限制。wait是让出资源,进入线程池等待。其他线程可以占用cpu资源。wait方法需要唤醒,用notify()或notifyAll()。
线程同步:线程同步是为了多个线程访问同一数据时,对数据造成破坏。可使用synchronized关键字同步方法或代码块
注意:用关键字synchronized修饰一个普通方法时。表示一个线程要执行该方法时,必须要获得该方法所在对象的锁。
用关键字synchronized修饰一个static法时。表示一个线程要执行该方法时,必须要获得该方法所在对象的锁。
用关键字synchronized修饰代码块如 synchronized (object){}表示一个线程要执行该代码块,必须要过的object的锁。这样作的目的是减少锁的粒度。减小程序的运行负荷。
当然,多线程的知识点远远不只这点。还有更深的内容,还需要在以后的学习中,认真的总结!
---------------------- android培训、java培训、期待与您交流! ----------------------