线程的概述
线程是一个在进程基础上发展起来的概念,引入它是为了提高系统的并发执行程度,进一步减少时间和空间的开销。
一、线程不能独立存在,必须存在于某个进程中。
二、同一进程内的线程都可以访问进程的所有资源,因此线程之间的通信比进程之间的通信要方便得多。
三、同一进程内的线程切换也比进程方便。
四、线程必须被系统调度而获得CPU使用权后才能运行,所以线程的执行顺序不是由程序本身控制的,而是由系统调度决定的。
线程的创建方式
一、继承Thread类并重写run()方法。
class Pig extends Thread {
public Pig(String threadName) {
super(threadName);
}
public void run() {
System.out.println("执行线程代码");
}
public static void main(String[] args) {
Pig pig1 = new Pig("线程1");
Pig pig2 = new Pig("线程2");
pig1.start();
pig2.start();
System.out.println("当前线程的线程组中活动线程的数目:"+pig1.activeCount());
}
}
二、实现Runnable接口并实现run()方法。
class Pig implements Runnable {
public void run() {
System.out.println("执行线程代码");
}
public static void main(String[] args) {
Pig pig1 = new Pig();
Pig pig2 = new Pig();
Thread t1 = new Thread(pig1);
Thread t2 = new Thread(pig2);
t1.start();
t2.start();
System.out.println("当前线程的线程组中活动线程的数目:"+t2.activeCount());
}
}
注:
1、若线程类已经继承了某个类,由于单继承的原因,此时应该使用Runnable接口的创建方式。
2、Runnable接口本身并没有对线程提供支持,还必须创建Thread类的对象,并把目标对象传递给Thread类来完成对线程执行的控制。
3、与Thread类相比,Runnable接口更适合于多个线程处理同一资源。
4、使用Runnable接口更符合面向对象的设计思想,而且几乎所有的多线程应用都可以通过实现Runnable接口的方式来完成。
线程的生命周期
待续
线程的调度和优先级
待续
线程的控制
一、线程的启动
线程的启动必须调用run()方法。当线程被分配到CPU资源后,才真正执行run()方法,这也是线程启动是调用start()方法,而不是直接调用run()方法的原因。
二、线程的休眠
1、sleep()方法。
2、示例:待续。
三、线程的联合
1、join()方法。
2、示例:待续。
四、线程的让步
1、yield()方法。
2、示例:待续。
五、当前线程状态的检查
待续
六、结束线程
待续
线程的同步问题
待续
线程的死锁问题
待续
线程间的通信
待续
来源:https://www.cnblogs.com/cuckoo20100401/p/8093131.html