欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

JAVA 线程,

来源: javaer 分享于  点击 5285 次 点评:110

JAVA 线程,


线程的几种状态
新建状态 (new 线程对象)
运行状态 (调用start方法)
阻塞状态 (等待CPU的执行资源)
休眠状态 (调用sleep(时间)方法)
等待状态 (调用wait方法)
终止状态 (run方法执行完毕)

线程的创建方式 — 匿名内部类
匿名内部类
相当于创建一个该类的子类对象

// 写法:
new 父类名()或接口名{
    重写父类或接口中方法
 };

这里new出来的 就是这个类的 子类对象
使用匿名内部类的方式创建线程
例1: 将类声明为 Thread 的子类

new Thread() {
    public void run() {
        for (int i = 0; i < 10; i++) {
        // 获取当前线程名字 getName()
        System.out.println(getName() + "--" + i);
        }
    };
}.start();

例2: 声明实现 Runnable 接口的类

new Thread(new Runnable() {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            // 获取当前线程名字 Thread.currentThread().getName()
            System.out.println(Thread.currentThread().getName() + "--" + i);
            }
        }
    }, "线程2") {

}.start();

线程休眠 — sleep();
让线程让出CPU的资源 — yield()

Thread类 是Runnable接口的实现类
重写接口中的 run方法
该方法没有抛出异常
所以 所有Runnable接口的实现类(包括Thread类)
都不能在run方法中 抛出异常 只能处理

同步锁
锁可以是任意对象 要保证锁的唯一
三个线程使用的是同一把锁

// 写法:
synchronized(对象锁){

}

同步锁的规则:
遇到锁
可以携带锁进去
当线程执行完代码块中的代码
把锁还回去

当线程没有遇到锁的时候
会在同步代码块外等待
例: 卖火车票

    // 声明50张票 保证票是共享数据 只New一次该类对象
    private int titkes = 50;
    // 创建了对象锁 并且保证唯一
    private Object obj = new Object();
    @Override
    public void run() {
        while (true) {
            // 锁只要保证唯一对对象 填this即可
            synchronized (this) {
                // 操作的共享数据的代码
            if (titkes > 0) {
                // 线程休眠一会
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                // 有票
                System.out.println
                (Thread.currentThread().getName() + "--" + titkes); 
                // 打印一次 减少一张
                titkes--;
            }else {
                // 没票 结束循环
                break;
                }
            }
            // 让线程让出CPU的资源
            Thread.yield();
        }
    }

死锁: 两个线程在执行过程中 都在等待被对方占用并堵塞的资源


Lock 接口

// 写法:
lock.lock();
try{
        写操作共享数据的代码
}finally{
        lock.unlock();
 }

接口实现创建线程的好处:
1.避免了直接继承Thread类的局限性(避免单继承)
2.接口即插即用 减少类与类之间联系

相关文章

    暂无相关文章
相关栏目:

用户点评