高并发线程学习——线程基础知识
1.什么是线程?
线程是进程的基本单元。一个进程可以有一个线程也可以有多个线程。
2.创建线程类的方法
第一种:继承Thread类重写它的run方法
如:
1 public class TestThread extends Thread {2 @Override3 public void run() {4 for (int i = 0; i < 10000; i++) {5 System.out.println("test 在执行");6 }7 }8 9 }
第二种:实现Runnable
public class TestRunnable implements Runnable { @Override public void run() { System.out.println("执行线程的代码块"); }}
在网上还有第三种方法但是我不常用就不介绍了等以后用到了再去整理
3.线程的启动方式
3.1 继承Thread类的启动方式
继承Thread类的启动方式是直接调用start方法
如:
public class TestThread extends Thread { @Override public void run() { System.out.println("继承Thread类 线程执行的代码块"); } public static void main(String[] args) { //创建一个继承Thread类的类对象 TestThread t1=new TestThread(); //如果是继承Thread类的类对象直接调用start方法就能启动这个线程了 t1.start(); } }
3.2 实现Runnable接口的启动方式
创建一个带参的Thread类对象,将实现Runnable的类的对象作为参数传递进去。然后调用带参Thread类的start方法就能启动我们创建的线程了
如:
public class TestRunnable implements Runnable { @Override public void run() { System.out.println("执行线程的代码块"); } public static void main(String[] args) { //创建一个Thread类对象,将实现Runnable接口的类对象作为参数传入到Thread构造方法中 Thread t1=new Thread(new TestRunnable()); //启动我们的线程 t1.start(); }}
4.线程的几种状态
线程的状态共分为七种种状态分别是:新建状态(New) ,就绪状态(Runnable),运行状态(Run),阻塞状态(Blocked),等待状态(Waiting),一定时间的等待状态(Time-Waiting),死亡状态(Terminated)
1.New 状态:指线程刚创建, 尚未启动
例如:Thread thread =new Thread( 实现runnable接口的类);
2.Runnable 状态:一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当线程对象调用start()方法即启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法。当start()方法返回后,线程就处于就绪状态。
当然 处于就绪状态的线程并不一定会立即运行run()方法,线程还必须同其他线程竞争CPU时间,只有获得CPU时间才可以运行线程。因为在单CPU的计算机系统中,不可能同时运行多个线程,一个时刻仅有一个线程处于运行状态。因此此时可能有多个线程处于就绪状态。对多个处于就绪状态的线程是由Java运行时系统的线程调度程序(thread scheduler)来调度的。
3.Run 状态:当线程获得CPU时间后,它才进入运行状态,真正开始执行run()方法。
4.Blocked 状态:用在多个线程有同步操作的情况, 比如正在等待另一个线程的synchronized 块的执行释放, 也就是这里是线程在等待进入临界区
5.Waiting 状态:这个状态下是指线程拥有了某个锁之后, 调用了它的wait方法, 等待其他线程/锁拥有者调用 notify / notifyAll 方法后 该线程才可以继续下一步操作, 这里要区分 Blocked 和 Waiting 的区别, 一个是在临界点外面等待进入, 一个是在临界点里面wait等待别人notify,。如果线程调用了join方法 join了另外的线程的时候, 也会进入waiting状态, 等待被他join的线程执行结束才回继续执行
6.Time-Waiting:这个状态就是有限的(有时间限制)的Waiting, 一般出现在调用wait(long), join(long)等情况下, 另外一个线程sleep后, 也会进入Timed_Waiting状态
7.Terminated 状态:线程执行完成后就会进入死亡状态。
参考博客:http://www.cnblogs.com/xll1025/tag/