YYPOST群发软件 发表于 7 天前

AIWROK软件线程优先级示例



AIWROK软件线程优先级示例






/*
   
   🍎交流QQ群711841924群一,苹果内测群,528816639
   线程优先级示例
   适用本文档ES5系统安卓 JavaScript引擎Rhino
*/
// 线程优先级常量定义
var MIN_PRIORITY = 1;      // 最低优先级
var NORM_PRIORITY = 5;   // 正常优先级
var MAX_PRIORITY = 10;   // 最高优先级

// 创建日志悬浮窗
var logWindow = new floatUI();
var logText = null;

// 初始化日志悬浮窗
function initLogWindow() {
    try {
      // 创建日志显示界面
      logWindow.loadXML(
            '<LinearLayout orientation="vertical" w="300" h="200" gravity="left">' +
            '<TextView id="logText" textColor="#00ff00" background="#000000" textSize="10" layout_width="wrap_content" layout_height="wrap_content" />' +
            '</LinearLayout>'
      );
      
      // 获取日志文本视图组件
      logText = logWindow.findViewById('logText');
      
      if (logText) {
            // 设置日志窗口位置(屏幕左上角)
            setTimeout(function() {
                logWindow.setPosition(10, 100);
            }, 100);
            
            // 设置初始日志内容
            logText.setText("线程优先级示例开始运行...");
      } else {
            printl("日志视图未正确初始化");
      }
    } catch (e) {
      printl("创建日志悬浮窗失败: " + String(e));
    }
}

// 更新日志显示内容
function updateLog(content) {
    printl(content); // 同时在控制台输出
   
    try {
      if (logText) {
            var currentTime = new Date().toLocaleTimeString();
            var logContent = logText.getText() || "";
            var newLogContent = "[" + currentTime + "] " + content + "\n" + logContent;
            // 限制日志行数,避免内容过多
            var logLines = newLogContent.split("\n");
            if (logLines.length > 20) {
                newLogContent = logLines.slice(0, 20).join("\n");
            }
            logText.setText(newLogContent);
      }
    } catch (e) {
      printl("更新日志显示失败: " + String(e));
    }
}

// 创建高优先级主线程任务
function mainTask() {
    try {
      var priority = "未知";
      try {
            priority = java.lang.Thread.currentThread().getPriority();
      } catch (e) {
            updateLog("无法获取当前线程优先级: " + String(e));
      }
      updateLog("主线程任务开始执行,优先级: " + priority);
      
      // 模拟主线程的重要任务
      for (var i = 1; i <= 5; i++) {
            updateLog("主线程任务执行中... 步骤 " + i);
            try {
                java.lang.Thread.sleep(1000); // 模拟耗时操作
            } catch (e) {
                updateLog("主线程休眠异常: " + String(e));
            }
      }
      
      updateLog("主线程任务执行完毕");
    } catch (e) {
      updateLog("主线程任务执行出错: " + String(e));
    }
}

// 创建低优先级后台任务
function backgroundTask() {
    try {
      var priority = "未知";
      try {
            priority = java.lang.Thread.currentThread().getPriority();
      } catch (e) {
            updateLog("无法获取当前线程优先级: " + String(e));
      }
      updateLog("后台线程任务开始执行,优先级: " + priority);
      
      // 模拟后台线程的次要任务
      for (var i = 1; i <= 10; i++) {
            updateLog("后台线程任务执行中... 步骤 " + i);
            try {
                java.lang.Thread.sleep(800); // 模拟耗时操作
            } catch (e) {
                updateLog("后台线程休眠异常: " + String(e));
            }
      }
      
      updateLog("后台线程任务执行完毕");
    } catch (e) {
      updateLog("后台线程任务执行出错: " + String(e));
    }
}

// 方法一:创建具有指定优先级的线程
function createPriorityThread() {
    updateLog("=== 方法一:直接设置线程优先级 ===");
   
    // 创建主线程(高优先级)
    var mainThread = new thread();
    mainThread.runJsCode(function() {
      try {
            // 尝试设置为最高优先级
            java.lang.Thread.currentThread().setPriority(MAX_PRIORITY);
      } catch (e) {
            updateLog("设置主线程优先级失败: " + String(e));
      }
      mainTask();
    }, "主线程-高优先级");
   
    // 创建后台线程(低优先级)
    var backgroundThread = new thread();
    backgroundThread.runJsCode(function() {
      try {
            // 尝试设置为最低优先级
            java.lang.Thread.currentThread().setPriority(MIN_PRIORITY);
      } catch (e) {
            updateLog("设置后台线程优先级失败: " + String(e));
      }
      backgroundTask();
    }, "后台线程-低优先级");
   
    // 监控线程状态
    var monitor = setInterval(function() {
      try {
            var mainAlive = mainThread.isAlive();
            var backgroundAlive = backgroundThread.isAlive();
            
            updateLog("主线程状态: " + (mainAlive ? "运行中" : "已完成") +
                   " | 后台线程状态: " + (backgroundAlive ? "运行中" : "已完成"));
            
            // 当两个线程都完成时,清理监控
            if (!mainAlive && !backgroundAlive) {
                clearInterval(monitor);
                updateLog("所有线程执行完成");
            }
      } catch (e) {
            updateLog("监控线程状态出错: " + String(e));
      }
    }, 500);
   
    // 15秒后强制停止所有线程(安全措施)
    setTimeout(function() {
      try {
            if (mainThread.isAlive()) {
                mainThread.stop();
            }
            if (backgroundThread.isAlive()) {
                backgroundThread.stop();
            }
            updateLog("强制停止所有线程");
      } catch (e) {
            updateLog("停止线程出错: " + String(e));
      }
    }, 15000);
}

// 方法二:使用任务调度方式实现优先级效果
function createScheduledPriorityThread() {
    updateLog("=== 方法二:使用任务调度方式实现优先级效果 ===");
   
    var mainTasks = [];
    var backgroundTasks = [];
   
    // 初始化任务队列
    for (var i = 1; i <= 5; i++) {
      mainTasks.push(i);
    }
   
    for (var i = 1; i <= 10; i++) {
      backgroundTasks.push(i);
    }
   
    var mainIndex = 0;
    var backgroundIndex = 0;
   
    // 高优先级任务执行器(主线程任务)
    var mainExecutor = setInterval(function() {
      if (mainIndex < mainTasks.length) {
            updateLog("高优先级任务执行中... 步骤 " + mainTasks);
            mainIndex++;
      } else {
            clearInterval(mainExecutor);
            updateLog("高优先级任务全部完成");
      }
    }, 900); // 更频繁地执行主线程任务
   
    // 低优先级任务执行器(后台线程任务)
    var backgroundExecutor = setInterval(function() {
      // 只有当主线程任务没有在执行时才执行后台任务(模拟优先级)
      if (backgroundIndex < backgroundTasks.length) {
            updateLog("低优先级任务执行中... 步骤 " + backgroundTasks);
            backgroundIndex++;
      } else {
            clearInterval(backgroundExecutor);
            updateLog("低优先级任务全部完成");
      }
    }, 1200); // 较低频率执行后台任务
   
    // 监控任务执行状态
    var monitor = setInterval(function() {
      var mainFinished = mainIndex >= mainTasks.length;
      var backgroundFinished = backgroundIndex >= backgroundTasks.length;
      
      updateLog("主线程任务状态: " + (mainFinished ? "已完成" : "运行中") +
               " | 后台线程任务状态: " + (backgroundFinished ? "已完成" : "运行中"));
      
      if (mainFinished && backgroundFinished) {
            clearInterval(monitor);
            updateLog("所有任务执行完成");
      }
    }, 500);
   
    // 15秒后强制停止所有任务(安全措施)
    setTimeout(function() {
      try {
            clearInterval(mainExecutor);
            clearInterval(backgroundExecutor);
            clearInterval(monitor);
            updateLog("强制停止所有任务");
      } catch (e) {
            updateLog("停止任务出错: " + String(e));
      }
    }, 15000);
}

// 方法三:使用线程休眠时间控制优先级
function createTimeBasedPriorityThread() {
    updateLog("=== 方法三:使用线程休眠时间控制优先级 ===");
   
    // 创建主线程(重要任务,休眠时间短)
    var importantThread = new thread();
    importantThread.runJsCode(function() {
      updateLog("重要任务线程开始执行");
      for (var i = 1; i <= 10; i++) {
            updateLog("重要任务执行中... 步骤 " + i);
            try {
                // 短暂休眠,表示高优先级
                java.lang.Thread.sleep(500);
            } catch (e) {
                updateLog("重要任务休眠异常: " + String(e));
            }
      }
      updateLog("重要任务执行完毕");
    }, "重要任务线程");
   
    // 创建后台线程(次要任务,休眠时间长)
    var secondaryThread = new thread();
    secondaryThread.runJsCode(function() {
      updateLog("次要任务线程开始执行");
      for (var i = 1; i <= 10; i++) {
            updateLog("次要任务执行中... 步骤 " + i);
            try {
                // 较长休眠,表示低优先级
                java.lang.Thread.sleep(1000);
            } catch (e) {
                updateLog("次要任务休眠异常: " + String(e));
            }
      }
      updateLog("次要任务执行完毕");
    }, "次要任务线程");
   
    // 监控线程状态
    var monitor = setInterval(function() {
      try {
            var importantAlive = importantThread.isAlive();
            var secondaryAlive = secondaryThread.isAlive();
            
            updateLog("重要任务线程状态: " + (importantAlive ? "运行中" : "已完成") +
                   " | 次要任务线程状态: " + (secondaryAlive ? "运行中" : "已完成"));
            
            if (!importantAlive && !secondaryAlive) {
                clearInterval(monitor);
                updateLog("所有线程执行完成");
            }
      } catch (e) {
            updateLog("监控线程状态出错: " + String(e));
      }
    }, 500);
   
    // 15秒后强制停止所有线程(安全措施)
    setTimeout(function() {
      try {
            if (importantThread.isAlive()) {
                importantThread.stop();
            }
            if (secondaryThread.isAlive()) {
                secondaryThread.stop();
            }
            updateLog("强制停止所有线程");
      } catch (e) {
            updateLog("停止线程出错: " + String(e));
      }
    }, 15000);
}

// 启动示例
initLogWindow(); // 初始化日志悬浮窗
updateLog("线程优先级设置示例开始");
try {
    var mainPriority = java.lang.Thread.currentThread().getPriority();
    updateLog("当前主线程优先级: " + mainPriority);
} catch (e) {
    updateLog("无法获取当前线程优先级: " + String(e));
}

// 运行方法一(原始方法)
createPriorityThread();

// 如果需要运行其他方法,可以取消下面的注释
// setTimeout(createScheduledPriorityThread, 20000); // 等待20秒后运行方法二
// setTimeout(createTimeBasedPriorityThread, 40000); // 等待40秒后运行方法三

页: [1]
查看完整版本: AIWROK软件线程优先级示例