本帖最后由 Bermuda 于 2014-8-7 08:07 编辑
创建: 方式一:继承Thread类 步骤: 继承Thread覆写run( )方法 通过Thread子类创建线程对象 调用start( );方法开启线程执行run( )
方式二:实现Runnable接口 步骤: 定义类实现Runnable接口 覆盖接口中的run( )方法 通过Thread类创建线程对象 将实现Runnable接口的子类对象作为实际参数传递给Thread类的构造函数 //让线程明确run( )方法所属对象是为了关联线程任务和线程对象 调用Thread对象的start( )方法。开启线程运行Runnable接口中的run( )方法 Ticket t = new Ticket(); Thread t1 = new Thread(t); //创建线程。 t实参传递,明确要运行的run( ) ,Ticket实现Runnable接口,覆写run()
状态:
创建: new Thread对象或其子类对象 运行: start( ),具备执行资格与执行权 冻结: 放弃执行资格与执行权 sleep(time); 必须指定时间,时间到从冻结状态变为运行状态 释放执行权不释放锁 wait( ); 指不指定时间都可以,不指定的话必须由notify或notifyAll唤醒 释放执行权,释放锁 (必须在同步中) 消亡: stop(); 阻塞: 线程具备cpu的执行资格,没有cpu的执行权 join方法:直到调用该方法的线程执行完再往下继续执行,异步变同步 yield方法:让出CPU执行权给同优先级线程与sleep类似 安全问题:
产生原因:多个线程操作共享数据,共享数据有多条语句,在某时刻被一个线程执行时没有执行完就被其他线程参与进来,并继续操作了共享数据,导致错误产生 多个线程操作共享数据 有多条语句对共享数据进行运算 解决:(加锁)共享数据的多条语句在某一时刻让一个线程执行完,其他线程不能执行 单例 只有一个对象:自己创建别人不能创建但我提供方法让你用 例子:军队指挥官,电脑资源管理器 ---饿汉 ---懒汉 -------安全(双重判断加锁 single.class) -------不安全 |