A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© zhangjingxian 中级黑马   /  2016-9-13 22:37  /  396 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

自己总结的,不全面,参考即可
多线程
1.  Thread 类

①创建线程方式——继承Thread类
创建线程的步骤:
        1 定义一个类继承Thread。
        2 子类中重写run方法。
        3 主方法中创建子类对象,就是创建线程对象。
        4 调用start方法,开启线程并让线程执行,同时还会告诉jvm去调用run方法。

获取线程名:Thread.currentThread().getName()
②创建线程方式——实现Runnable接口

创建线程的步骤。
1、定义类实现Runnable接口。
2、覆盖接口中的run方法。。
3、创建Thread类的对象
4、将Runnable接口的子类对象作为参数传递给Thread类的构造方法。
ThreadTask task = new ThreadTask();
Thread t = new Thread(task, "新线程");
Thread t2 = new Thread(task, "新线程222");
5、调用Thread类的start方法开启线程。

sleep方法
Thread.sleep(500);    //500代表睡眠500毫秒
方法写在run方法中需要处理异常(ryy....catch)
2.线程池
使用线程池中线程对象的步骤:
    创建线程池对象
    创建Runnable/Callable接口子类对象
    提交Runnable/Callable接口子类对象
    关闭线程池      //实际开发中一般省略此步
ExecutorService threadPool = Executors.newFixedThreadPool(3);   //创建线程池
Task task = new Task(); //线程任务类对象
threadPool.submit(task); //获取线程池中的某个线程对象,执行线程任务操作,可以多个
  //threadPool.shutdown();   //关闭线程池
   
Runnable接口 与 Callable接口的区别:
        Runnable:
            run()方法没有返回值
            run()方法不能抛出异常
        Callable:
            call()方法有返回值
            call()方法可以抛出异常 Exception
3.线程安全
①同步代码块  (主方法内容不用修改,只修改线程类)
public class Task implements Runnable{
    int ticket = 100;   //定义票数
    Object obj = new Object();   //定义一个锁对象,可以是任意类型
    @Override
    public void run() {       //run方法
        while(true){
            synchronized (s) {      //同一个锁对象
                if (ticket > 0) {
               System.out.println(Thread.currentThread().getName() + "卖票" + ticket);
                    ticket--;
                }
            }
        }
    }
}
②同步方法 (主方法内容不用修改,只修改线程类)
public class Task implements Runnable{
    int ticket = 100;    //定义票数
    @Override
    public void run() {    //run方法
        while(true){
            method();   //调用同步方法
        }
    }
    public synchronized void method(){   //创建同步方法,方法用synchronized修饰
        if (ticket > 0) {
            System.out.println(Thread.currentThread().getName() + "卖票" + ticket);
            ticket--;
        }
    }
}
③Lock接口

public class Task implements Runnable{
    int ticket = 100;    //定义票数
    Lock ck = new ReentrantLock();    //创建锁对象
    @Override
    public void run() {       //run方法
        while(true){
            ck.lock();    //上锁
                if (ticket > 0) {
              System.out.println(Thread.currentThread().getName() + "卖票" + ticket);
                    ticket--;
                }
            ck.unlock();   //解锁  
        }
    }
}

5 个回复

倒序浏览
.。。。。。。。。。。。。。。。
回复 使用道具 举报
后天 我们也要开始学这个了
回复 使用道具 举报
666666666666666666666
回复 使用道具 举报
顶一个 666
回复 使用道具 举报
刘永川 来自手机 中级黑马 2016-9-13 23:31:14
地板
确实有心了,难得的前辈,很强势,加油,共勉
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马