• Java 多线程


    实现多线程的三种方式

    1.创建线程类继承Thread.重写run 方法,调用时使用该类的对象的start方法启动.
    2.创建类实现Runnable接口.重写run方法.调用时将该类的对象作为参数创建新的线程,调用新线程的start方法启动.
    3.匿名类:直接新建一个Thread的匿名类对象,重写run方法.
    Thread t = new Thread{
    public void run(){
    ...
    }
    };
    t.start();

    常见线程方法.

    1.sleep.暂停当前线程Thread.sleep(1000); 表示暂停1s
    2.join.加入当前线程中.等待加入线程执行完毕后才继续执行.
    3.setPriority设置优先级.
    4.yield.暂停
    5.setDaemon(true)守护线程.

    Synchronized

    1.所有的对象都可以作为同步对象使用,使用synchronized(object)声明对object的占用,同时只能有一个对象占用object.
    2.用synchronized关键字修饰方法使得同时只能由一个线程访问该方法.
    public synchronized void f(){}
    3.一个所有方法都由synchronized方法修饰的类是线程安全的类.(HashTable,StringBuffer,Vector)
    4.可以用Collections工具类的synchronizedList方法让一个非线程安全的类转换为线程安全的类
    5.wait,nofity,notifyAll

    线程池ThreadPoolExecutor.

    ThreadPoolExecutor threadPool= new ThreadPoolExecutor(10, 15, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
    threadPool.execute(new Runnable(){
        public void run(){}
    }
    

    像这样创建一个保持10线程,最大15线程,60s后减少线程到10的线程池并执行一个新的任务.

    lock对象.

    不同于Synchronized,lock在代码层面实现同步功能,可以自定义等待时间避免死锁.可以使用trylock方法在尝试一段时间后放弃占用.
    await,signal,signalAll
    Lock lock = new ReentrantLock();

        Thread t1 = new Thread() {
            public void run() {
                boolean locked = false;
                try {
                    log("线程启动");
                    log("试图占有对象:lock");
    
                    locked = lock.tryLock(1,TimeUnit.SECONDS);
                    if(locked){
                        log("占有对象:lock");
                        log("进行5秒的业务操作");
                        Thread.sleep(5000);
                    }
                    else{
                        log("经过1秒钟的努力,还没有占有对象,放弃占有");
                    }
    
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                     
                    if(locked){
                        log("释放对象:lock");
                        lock.unlock();
                    }
                }
                log("线程结束");
            }
  • 相关阅读:
    java数据类型
    索引的种类和优缺点
    IntelliJ IDEA 自动导入快捷键
    KTV点歌系统------LinkedList
    KTV 点歌系统------ArrayList
    超市购物程序
    awk 入门教程
    Git 分支开发规范
    私有镜像仓库Harbor设置https、http访问
    私有镜像仓库Harbor部署
  • 原文地址:https://www.cnblogs.com/bestefforts/p/11349863.html
Copyright © 2020-2023  润新知