标签:notify 不同的 2-2 内存 类成员变量 sys tar 还需 另一个
1 目录 2 线程概述 3 线程的定义 4 线程的启动 5 线程的状态 6 线程的方法属性
线程是一个程序的多个执行路径,执行调度的单元,依托于进程的存在。线不仅可以共享进程的内在,而且还拥有一个属于自己的内存空间,这段内存空间就是线程栈,是在建立线程时系统分配的,主要用来保存线内部所使用的数据,如线程执行函数中所定义的变量,线程的状态等信息。
Java中的多线程是一个抢占机制,抢占机制指的是多个线程处于可运行状态,但只是允许一个线程运行,他们通过竞争方式抢占CPU。
定义一个线程(Defining a Thread)有两种方法:
[1] 继承java.lang.Thread类,重写run()方法
/** * 使用继承java.lang.Thread类的方式创建一个线程 * * @author DreamSea 2011-12-29 20:17:06 */ public class ThreadTest extends Thread { /** * 重写(Override)run()方法 JVM会自动调用该方法 */ public void run() { System.out.println("I‘m running!"); } }
重写(override)run()方法在该线程的start()方法被调用后,JVM会自动调用run方法来执行任务。
[2] 实现java.lang.Runnable接口,并将其传入到Thread类对象中
/** * 通过实现Runnable接口创建一个线程 * @author DreamSea */ public class ThreadTest implements Runnable { public void run() { System.out.println("I‘m running!"); } }
ThreadTest1 thread1 = new ThreadTest1(); thread1.start();
[2] 如果是实现Runnable接口,则创建方式如下:
ThreadTest2 thread2 = new ThreadTest2(); Thread t = new Thread(thread2); t.start();
同步的前提
1. 必须要有2个或者2个以上的线程
2. 必须是多个线程使用同一个锁,多个线程可以同时操作同一个锁下的代码。
同步的弊端
1. 线程每次进入同步代码块或同步函数都要判断锁,浪费资源,影响效率
2. 可能出现死锁现象,多发生在一个同步代码块或同步函数中嵌套另一个同步函数或同步代码块,且2个同步上使用不同的锁。即同步中嵌套同步而锁不同就容易引发死锁。
wait():可以指定时间也可以不指定时间,不指定时间时,只能由对应的notify()或notifyAll()来唤醒。
sleep():必须指定时间,时间到自动从冻结状态转入运行状态或临时阻塞状态。
wait():线程会释放执行权,并释放锁。
sleep():线程会释放执行权,但是并不释放锁。
标签:notify 不同的 2-2 内存 类成员变量 sys tar 还需 另一个
原文地址:http://www.cnblogs.com/lc-java/p/7519620.html