⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 conc.js

📁 一个小公司要求给写的很简单的任务管理系统。
💻 JS
字号:
/** @(#)conc.js	1.1 06/08/06** Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions are met:** -Redistribution of source code must retain the above copyright notice, this*  list of conditions and the following disclaimer.** -Redistribution in binary form must reproduce the above copyright notice,*  this list of conditions and the following disclaimer in the documentation*  and/or other materials provided with the distribution.** Neither the name of Sun Microsystems, Inc. or the names of contributors may* be used to endorse or promote products derived from this software without* specific prior written permission.** This software is provided "AS IS," without a warranty of any kind. ALL* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING* ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE* OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN")* AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE* AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS* DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST* REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,* INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY* OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.** You acknowledge that this software is not designed, licensed or intended* for use in the design, construction, operation or maintenance of any* nuclear facility.*//* * Concurrency utilities for JavaScript. These are based on * java.lang and java.util.concurrent API. The following functions  * provide a simpler API for scripts. Instead of directly using java.lang * and java.util.concurrent classes, scripts can use functions and * objects exported from here.  *//** * Wrapper for java.lang.Object.wait * * can be called only within a sync method */function wait(object) {    var objClazz = java.lang.Class.forName('java.lang.Object');    var waitMethod = objClazz.getMethod('wait', null);    waitMethod.invoke(object, null);}wait.docString = "convenient wrapper for java.lang.Object.wait method";/** * Wrapper for java.lang.Object.notify * * can be called only within a sync method */function notify(object) {    var objClazz = java.lang.Class.forName('java.lang.Object');    var notifyMethod = objClazz.getMethod('notify', null);    notifyMethod.invoke(object, null);}notify.docString = "convenient wrapper for java.lang.Object.notify method";/** * Wrapper for java.lang.Object.notifyAll * * can be called only within a sync method */function notifyAll(object)  {    var objClazz = java.lang.Class.forName('java.lang.Object');    var notifyAllMethod = objClazz.getMethod('notifyAll', null);    notifyAllMethod.invoke(object, null);}notifyAll.docString = "convenient wrapper for java.lang.Object.notifyAll method";/** * Creates a java.lang.Runnable from a given script * function. */Function.prototype.runnable = function() {    var args = arguments;    var func = this;    return new java.lang.Runnable() {        run: function() {            func.apply(null, args);        }    }}/** * Executes the function on a new Java Thread. */Function.prototype.thread = function() {    var t = new java.lang.Thread(this.runnable.apply(this, arguments));    t.start();    return t;}/** * Executes the function on a new Java daemon Thread. */Function.prototype.daemon = function() {    var t = new java.lang.Thread(this.runnable.apply(this, arguments));    t.setDaemon(true);    t.start();    return t;}/** * Creates a java.util.concurrent.Callable from a given script * function. */Function.prototype.callable = function() {    var args = arguments;    var func = this;    return new java.util.concurrent.Callable() {          call: function() { return func.apply(null, args); }    }}/** * Registers the script function so that it will be called exit. */Function.prototype.atexit = function () {    var args = arguments;    java.lang.Runtime.getRuntime().addShutdownHook(         new java.lang.Thread(this.runnable.apply(this, args)));}/** * Executes the function asynchronously.   * * @return a java.util.concurrent.FutureTask */Function.prototype.future = (function() {    // default executor for future    var juc = java.util.concurrent;    var theExecutor = juc.Executors.newSingleThreadExecutor();    // clean-up the default executor at exit    (function() { theExecutor.shutdown(); }).atexit();    return function() {        return theExecutor.submit(this.callable.apply(this, arguments));    }})();// shortcut for j.u.c lock classesvar Lock = java.util.concurrent.locks.ReentrantLock;var RWLock = java.util.concurrent.locks.ReentrantReadWriteLock;/** * Executes a function after acquiring given lock. On return, * (normal or exceptional), lock is released. * * @param lock lock that is locked and unlocked */Function.prototype.sync = function (lock) {    if (arguments.length == 0) {        throw "lock is missing";    }    var res = new Array(arguments.length - 1);    for (var i = 0; i < res.length; i++) {        res[i] = arguments[i + 1];    }    lock.lock();    try {        this.apply(null, res);    } finally {        lock.unlock();    }}/** * Causes current thread to sleep for specified * number of milliseconds * * @param interval in milliseconds */function sleep(interval) {    java.lang.Thread.sleep(interval);}sleep.docString = "wrapper for java.lang.Thread.sleep method";/** * Schedules a task to be executed once in * every N milliseconds specified.  * * @param callback function or expression to evaluate * @param interval in milliseconds to sleep * @return timeout ID (which is nothing but Thread instance) */function setTimeout(callback, interval) {    if (! (callback instanceof Function)) {        callback = new Function(callback);    }    // start a new thread that sleeps given time    // and calls callback in an infinite loop    return (function() {         while (true) {             sleep(interval);             callback();         }    }).daemon();}setTimeout.docString = "calls given callback once after specified interval"/**  * Cancels a timeout set earlier. * @param tid timeout ID returned from setTimeout */function clearTimeout(tid) {    // we just interrupt the timer thread    tid.interrupt();}/** * Simple access to thread local storage.  * * Script sample: * *  __thread.x = 44; *  function f() {  *      __thread.x = 'hello';  *      print(__thread.x);  *  } *  f.thread();       // prints 'hello' * print(__thread.x); // prints 44 in main thread */var __thread = (function () {    var map = new Object();    return new JSAdapter() {        __has__: function(name) {            return map[name] != undefined;        },        __get__: function(name) {            if (map[name] != undefined) {                return map[name].get();            } else {                return undefined;            }        },        __put__: sync(function(name, value) {            if (map[name] == undefined) {                var tmp = new java.lang.ThreadLocal();                tmp.set(value);                map[name] = tmp;            } else {                map[name].set(value);            }        }),        __delete__: function(name) {            if (map[name] != undefined) {                map[name].set(null);            }                    }    }})();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -