JAVA多线程

线程的2中创建方式

创建线程的第一种方式:继承 Thread,由子类重写run方法

class Th1

{

    public static void main(String[] args)

    {

           Thread1 th = new Thread1();

            th.start()

    }

}

class Thread1 extends Thread

{

    public void run()

    {

    // 线程执行内容

    }

}

线程状态:

新建:start()

运行:具备执行资格,同事具备执行权

冻结:sleep(time), wait() -- notify()唤醒, 线程释放了执行权,同事释放执行资格

临时阻塞状态:线程具备cpu的执行资格,没有cpu的执行权

消亡:Stop()

创建多线程的第二种方式:实现一个接口 Runable

class Th2

{

    public static void main(String[] args)

    {

        Thread2 t = new Thread2();

        Thread th = new Thread(t);

        th.start();

    }

}


public Thread2 implements Runnable

{

    public vlid run(){

// 线程执行内容

    }

}


多线程安全问题的原因:

一个线程在执行多条语句的时候,并预算同一个数据时,在执行过程中,其他线程参与进来,并操作了这个数据,导致了错误数据的产生。

解决安全问题的原理:

只要将操作的共享数据的语句在某一时段让一个线程执行完,在执行过程中,其他西城不能执行就可以了

JAVA中提供一个解决方案方式:同步代码块

格式:

Synchroized(对象) { 对任意对象都可以,这个对象就是缩

需要同步的代码

}


wait 和 sleep 的区别:

wait 可以指定时间,也可以不指定时间。不指定时间,只能由notify或者notifyAll来唤醒

sleep:必须指定时间,时间到自动从冻结状态转成运行状态

wait : 线程会释放执行权,而且线程会释放锁

sleep:线程会释放执行权,但是不会释放锁

你可能感兴趣的:(JAVA多线程)