线程,又称轻量级进程(Light Weight Process)。 程序中的一个顺序控制流程,同时也是CPU的基本调度单位。 进程由多个线程组成,彼此间完成不同的工作,交替执行, 称为多线程
进程与线程的区别
• 进程是操作系统资源分配的基本单位,而线程是CPU的基本调度单位。
• 一个程序运行后至少有一个进程。
• 一个进程可以包含多个线程,但是至少需要有一个线程。
• 进程间不能共享数据段地址,但同进程的线程之间可以。
线程的组成:
• CPU时间片:操作系统(OS)会为每个线程分配执行时间。
• 运行数据:
• 堆空间:存储线程需使用的对象,多个线程可以共享堆中的对象。
• 栈空间:存储线程需使用的局部变量,每个线程都拥有独立的栈。
• 线程的逻辑代码。
创建线程的第一种------继承Thread
代码格式:
public class TestCreateThread { public static void main(String[] args) { MyThread t1 =new MyThread(); t1.start(); } } class MyThread extends Thread{ @Override public void run() { for(int i = 1;i<=20;i++){ System.out.println("mythread"+i); } } }
第二种——————runnable接口
代码格式:
public class TestCreateThread { public static void main(String[] args) { MyRunnable m1 = new MyRunnable(); Thread t2 =new Thread(m1); t2.start(); } }
class MyRunnable implements Runnable{ @Override public void run() { for(int i = 1;i<=20;i++){ // System.out.println("myrunnable"+i); } }
常见方法:
• 休眠: • public static void sleep(long millis) • 当前线程主动休眠 millis 毫秒。
• 放弃: • public static void yield() • 当前线程主动放弃时间片,回到就绪状态,竞争下一次时间片。
• 结合: • public final void join() • 允许其他线程加入到当前线程中。
线程同步(1)
• 同步代码块: synchronized(临界资源对象){ //对临界资源对象加锁 //代码(原子操作) }
注:• 每个对象都有一个互斥锁标记,用来分配给线程的。
• 只有拥有对象互斥锁标记的线程,才能进入对该对象加锁的同步代码块。
• 线程退出同步代码块时,会释放相应的互斥锁标记
同步方法(2): synchronized 返回值类型 方法名称(形参列表){ //对当前对象(this)加锁 // 代码(原子操作) }注:
•只有拥有对象互斥锁标记的线程,才能进入该对象加锁的同步方法中。
•线程退出同步方法时,会释放相应的互斥锁标记
Light Weight Process
)。
程序中的一个顺序控制流程,同时也是
CPU
的基本调度单位。
进程由多个线程组成,彼此间完成不同的工替执行,
称为多线程