`

java代码规范制定

 
阅读更多
  
    // 方法throw折行空4个空格    
    private void writeObject(java.io.ObjectOutputStream s)
        throws java.io.IOException {
        s.defaultWriteObject();
        s.writeObject(getException());
    }



    // (ForkJoinTask.class.getDeclaredField("status"))参数折行     
    static {
        exceptionTableLock = new ReentrantLock();
        exceptionTableRefQueue = new ReferenceQueue<Object>();
        exceptionTable = new ExceptionNode[EXCEPTION_MAP_CAPACITY];
        try {
            UNSAFE = sun.misc.Unsafe.getUnsafe();
            statusOffset = UNSAFE.objectFieldOffset
                (ForkJoinTask.class.getDeclaredField("status"));
        } catch (Exception e) {
            throw new Error(e);
        }
    }



  /**
     * Wakes up or creates a worker.
     */
    final void signalWork() {
        /*
         * The while condition is true if: (there is are too few total
         * workers OR there is at least one waiter) AND (there are too
         * few active workers OR the pool is terminating).  The value
         * of e distinguishes the remaining cases: zero (no waiters)
         * for create, negative if terminating (in which case do
         * nothing), else release a waiter. The secondary checks for
         * release (non-null array etc) can fail if the pool begins
         * terminating after the test, and don't impose any added cost
         * because JVMs must perform null and bounds checks anyway.
         */
        long c; int e, u;
        while ((((e = (int)(c = ctl)) | (u = (int)(c >>> 32))) &
                (INT_SIGN|SHORT_SIGN)) == (INT_SIGN|SHORT_SIGN) && e >= 0) {
            if (e > 0) {                         // release a waiting worker
                int i; ForkJoinWorkerThread w; ForkJoinWorkerThread[] ws;
                if ((ws = workers) == null ||
                    (i = ~e & SMASK) >= ws.length ||
                    (w = ws[i]) == null)
                    break;
                long nc = (((long)(w.nextWait & E_MASK)) |
                           ((long)(u + UAC_UNIT) << 32));
                if (w.eventCount == e &&
                    UNSAFE.compareAndSwapLong(this, ctlOffset, c, nc)) {
                    w.eventCount = (e + EC_UNIT) & E_MASK;
                    if (w.parked)
                        UNSAFE.unpark(w);
                    break;
                }
            }
            else if (UNSAFE.compareAndSwapLong
                     (this, ctlOffset, c,
                      (long)(((u + UTC_UNIT) & UTC_MASK) |
                             ((u + UAC_UNIT) & UAC_MASK)) << 32)) {
                addWorker();
                break;
            }
        }
    }



   
    private boolean tryReleaseWaiter() {
        long c; int e, i; ForkJoinWorkerThread w; ForkJoinWorkerThread[] ws;
        if ((e = (int)(c = ctl)) > 0 &&
            (int)(c >> AC_SHIFT) < 0 &&
            (ws = workers) != null &&
            (i = ~e & SMASK) < ws.length &&
            (w = ws[i]) != null) {
            long nc = ((long)(w.nextWait & E_MASK) |
                       ((c + AC_UNIT) & (AC_MASK|TC_MASK)));
            if (w.eventCount != e ||
                !UNSAFE.compareAndSwapLong(this, ctlOffset, c, nc))
                return false;
            w.eventCount = (e + EC_UNIT) & E_MASK;
            if (w.parked)
                UNSAFE.unpark(w);
        }
        return true;
    }
  



 
 
    final int idlePerActive() {
        // Approximate at powers of two for small values, saturate past 4
        int p = parallelism;
        int a = p + (int)(ctl >> AC_SHIFT);
        return (a > (p >>>= 1) ? 0 :
                a > (p >>>= 1) ? 1 :
                a > (p >>>= 1) ? 2 :
                a > (p >>>= 1) ? 4 :
                8);
    }




    /**
     * Final callback from terminating worker.  Removes record of
     * worker from array, and adjusts counts. If pool is shutting
     * down, tries to complete termination.
     *
     * @param w the worker
     */
    final void deregisterWorker(ForkJoinWorkerThread w, Throwable ex) {
        int idx = w.poolIndex;
        int sc = w.stealCount;
        int steps = 0;
        // Remove from array, adjust worker counts and collect steal count.
        // We can intermix failed removes or adjusts with steal updates
        do {
            long s, c;
            int g;
            if (steps == 0 && ((g = scanGuard) & SG_UNIT) == 0 &&
                UNSAFE.compareAndSwapInt(this, scanGuardOffset,
                                         g, g |= SG_UNIT)) {
                ForkJoinWorkerThread[] ws = workers;
                if (ws != null && idx >= 0 &&
                    idx < ws.length && ws[idx] == w)
                    ws[idx] = null;    // verify
                nextWorkerIndex = idx;
                scanGuard = g + SG_UNIT;
                steps = 1;
            }
            if (steps == 1 &&
                UNSAFE.compareAndSwapLong(this, ctlOffset, c = ctl,
                                          (((c - AC_UNIT) & AC_MASK) |
                                           ((c - TC_UNIT) & TC_MASK) |
                                           (c & ~(AC_MASK|TC_MASK)))))
                steps = 2;
            if (sc != 0 &&
                UNSAFE.compareAndSwapLong(this, stealCountOffset,
                                          s = stealCount, s + sc))
                sc = 0;
        } while (steps != 2 || sc != 0);
        if (!tryTerminate(false)) {
            if (ex != null)   // possibly replace if died abnormally
                signalWork();
            else
                tryReleaseWaiter();
        }
    }



  
 
    public final Throwable getException() {
        int s = status;
        return ((s >= NORMAL)    ? null :
                (s == CANCELLED) ? new CancellationException() :
                getThrowableException());
    }
  



    public static ForkJoinPool getPool() {
        Thread t = Thread.currentThread();
        return (t instanceof ForkJoinWorkerThread) ?
            ((ForkJoinWorkerThread) t).pool : null;
    }



    public boolean tryUnfork() {
        return ((ForkJoinWorkerThread) Thread.currentThread())
            .unpushTask(this);
    }



    public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }



    private static final long SHRINK_RATE =
        4L * 1000L * 1000L * 1000L; // 4 seconds


            boolean casNext(SNode cmp, SNode val) {
                return cmp == next &&
                    UNSAFE.compareAndSwapObject(this, nextOffset, cmp, val);
            }

分享到:
评论

相关推荐

    阿里巴巴Java代码规范PDF.zip

    《阿里巴巴Java代码规范》是Java开发者们遵循的一套专业编程指南,旨在提高代码质量、可读性和维护性。这份规范由阿里巴巴集团内部的专家团队制定,经过多年的实践和完善,已经成为业界广泛参考的标准之一。以下是对...

    Java代码规范.doc

    ### Java代码规范详解 #### 一、前言 1. **为什么使用代码规范** - 软件的生命周期中,大约80%的成本都花费在维护上。因此,为了提高软件的可维护性和可读性,代码规范显得尤为重要。 - 维护通常不是由最初的...

    阿里推的一个java代码规范插件

    阿里推的这个Java代码规范插件,名为P3C(Alibaba Java Coding Guidelines Plug-in),是基于Eclipse和IntelliJ IDEA开发的,旨在帮助开发者遵循阿里巴巴内部制定的一套严谨的Java编程规范。该规范旨在提升代码质量...

    Java代码规范-Android版

    Java代码规范针对Android开发的规定相当细致,涉及到代码排版、注释、标识符命名以及代码的可读性等方面,旨在确保代码的整洁性、一致性和可维护性。以下是根据给定文件信息,详细解读的Java代码规范知识点。 首先...

    java案例代码规范

    Java代码规范是编程实践中非常重要的一个方面,它不仅有助于提高代码的可读性和可维护性,还能提升团队协作效率。以下是一些关于Java代码规范的关键点: 1. **版权信息**:每个Java文件的开头都应该包含版权信息,...

    JAVA代码规范(sum公司的英文版本)

    本文档是根据Java编程语言的官方指导,结合SUM公司的实践经验和标准制定的JAVA代码规范。这份规范旨在提升团队协作效率,减少误解,提高代码质量。 1. 引言 1.1 为什么要有代码规范 代码规范的重要性在于,它能够...

    java代码规范

    代码规范比比皆是,但是很少有公司做好代码规范的。忍不住想谈谈代码规范的重要性,希望所有人都能够重视起来。而且,我相信,如果我们代码规范能够做好的话,且不说开发水平提高多少,至少我们也会有很多出色开源...

    idea中阿里巴巴java代码格式规范插件

    首先,让我们了解阿里巴巴Java代码规范。阿里巴巴作为中国领先的互联网公司,其开发团队制定了一套详细的Java编程规范——《Alibaba Java Coding Guidelines》。这套规范涵盖了命名规则、注释规范、异常处理、并发...

    jsp,java代码规范

    下面将详细讨论JSP和Java代码规范的一些关键要点。 ### JSP代码规范 1. **注释**:为每个JSP页面添加注释,包括作者、创建日期、更新日期以及页面功能描述,以便于后续维护。 2. **结构清晰**:避免过多的脚本...

    java代码规范.doc

    【Java代码规范】是开发团队为了确保代码质量、提高代码可读性和可维护性而制定的一套编程标准。编码规范的遵循对于软件的生命周期至关重要,因为大部分时间和成本都花在了代码的维护上,而代码通常由不同的人接手...

    Java语言代码规范.Java语言编码规范.zip

    Java语言编码规范是软件开发中的重要组成部分,它旨在提高代码的可读性、可维护性和团队协作效率。遵循良好的编码规范能确保代码的一致性,降低...通过不断学习和实践,开发者可以写出更加高效、可读性强的Java代码。

    阿里java开发规范插件idea eclipse

    该插件旨在帮助开发者遵循阿里巴巴制定的Java编码规范,提升代码质量和可读性,从而提高团队协作效率。下面将详细解释这款插件的功能、使用方法以及其对开发工作的重要性。 首先,了解阿里巴巴的Java编码规范至关...

    java、前端代码规范(阿里巴巴).zip

    首先,让我们深入了解一下Java代码规范。Java规范通常包括命名规则、注释规范、类与对象设计、异常处理、并发编程等多个方面。阿里巴巴的Java代码规范强调了以下几点: 1. **命名规范**:变量、方法、类名应使用有...

    Java代码规范(英文版)

    ### Java代码规范详解 #### 一、引言 在软件开发过程中,代码规范的重要性不言而喻。良好的代码规范不仅能提高代码的可读性和可维护性,还能促进团队成员之间的协作与沟通。本文将详细介绍《Java代码规范》文档中...

    阿里巴巴Java编程规范_阿里巴巴Java编程规范_

    《阿里巴巴Java编程规范》是阿里巴巴官方团队为了提升Java开发者代码质量与一致性,降低维护成本而制定的一套详尽的编程指南。这份规范不仅对新手有很好的引导作用,也为经验丰富的开发者提供了良好的编码习惯建议,...

    java代码书写规范

    【Java代码书写规范】 在Java编程中,代码的书写规范是非常重要的,它有助于提高代码的可读性,便于团队协作和后期维护。以下是一些关键的命名规则和书写规范: 1. **命名规则**: - **通用规则**:所有命名应该...

    Java 代码编码规范

    考虑到现代软件开发过程中,维护阶段通常占据了80%的工作量,并且维护者往往不是最初的开发者,因此代码规范的制定与遵循显得尤为重要。尽管一些程序员可能认为这些规范限制了个人风格,但在团队合作中,统一的规范...

Global site tag (gtag.js) - Google Analytics