避免单个线程独占CPU

遇到的问题

UI 跳转界面的时候发现过了好久才跳转, 最后发现后台存在的一个线程, 负责处理接收到的数据, 一秒接收到的数据大约有100多条, 由于这个子线程会运行几秒钟, 不断处理数据占用CPU, 造成 UI 线程无法刷新界面.

java 多线程的知识点

解决

一开始想的是, 既然是因为子线程抢着CPU不放手, 那通知子线程放弃这次的CPU占用, 子线程一释放, UI 线程就可以拿到CPU. 然后首先想到的就是 Thread 的.yield()方法, 不过 yield() 方法在我的程序运行平台上不给力, 子线程最多暂缓10毫秒, 多数情况下子线程不会停下脚步;

然后想到了设置优先级 setPriority(int), 优先级高的优先获取CPU资源, 一般线程默认优先级是5, 在将子线程的优先级设为1后, 有了明显的改善.

0 Comments
Leave a Reply