一、线程的创建: 1.继承Thread类,复写run()方法。 class Thread1 extends Thread
{
public void run()
{
for(int x=0; x<20; x++)
System.out.println("Thread1 run--"+x);
}
}
class Test
{
public static void main(String[] args)
{
Thread1 a = new Thread1();
a.start();
for(int x=0; x<20; x++)
System.out.println("Main run--"+x);
}
} 2.实现Runnable接口,覆盖run()方法。好处:避免了单继承的局限性。 class Thread1 implements Runnable
{
public void run()
{
for(int x=0; x<20; x++)
System.out.println("Thread1 run--"+x);
}
}
class Test
{
public static void main(String[] args)
{
Thread1 b = new Thread1();
Thread a = new Thread(b);
a.start();
for(int x=0; x<20; x++)
System.out.println("Main run--"+x);
}
} 二、线程的五种状态: 1.被创建,通过 new Thread()来创建线程。 2.运行状态,通过线程的start()方法运行线程。 3.冻结状态,通过sleep()、wait(),方法让线程冻结。 4.阻塞状态,线程从冻结状态激活,具备了运行资格,但未获取到执行权 5.消亡,线程的run()方法的结束,或者通过stop()方法 使线程终结。 三、线程的同步,由于多线程运行时,各线程会存在CPU的执行权互相争抢,导致共享的数据错误,所以使用同步加锁来保证多线程的安全性。但是同步同时也比较消耗资源。 1.同步代码块 synchronized(对象) { 需要同步的代码 } 2.同步函数 public synchronized void show(){} 注意:非静态同步函数使用的锁的对象为this,也就是本类对象。静态同步函数所使用的锁为 类名.class 为本类对象的字节码文件对象。 三、死锁 同步中嵌套同步,但是他们各自使用的锁却不为同一对象。如下:俩个线程同时运行里面的if else的俩段代码。 if(ture){ public synchronized void show() { synchronized(Object) { 需要同步的代码; } } } else{ synchronized(Object) { public synchronized void show() { 需要同步的代码 } } }
|