SWT中多线程应用 2 例

使用多线程,时时更新Label显示当前时间。

例子代码包括两部分,run方法使用eclipse提供的默认方法实现,SWTlabel刷新。
run2方法使用timetask线程(java多线程方式)实现。
不管什么方式,都回避不了,eclipse多线程对java多线程的限制(在java线程中不可以直接操作SWT的control)。
但是个人认为:倾向使用java线程套eclipse线程的方式,因为多线程的负担由eclipse平台转移至了java虚拟机。对于非常复杂的数据计算或许可以提高效率。减少eclipse的响应时间。
(以上观点,仅仅是使用中的猜测,没有任何证据。希望我可以发现证据支持这一猜测)
public class Runner {
		private Label ll;

		private boolean start = false;

		private Timer timer;

		public Runner(Label ll) {
			this.ll = ll;
		}

		public void start() {
			start = true;
			// run();
			run2();
		}

		private void run() {
			Display.getDefault().asyncExec(new Runnable() {
				public void run() {
					if (!start)
						return;
					ll.setText(new Date().toString());
					Display.getDefault().timerExec(2000, this);
				}
			});
		}

		private void run2() {
			timer = new Timer(true);
			timer.scheduleAtFixedRate(new TimerTask() {
				public void run() {
					if (!start)
						return;
					Display.getDefault().asyncExec(new Runnable() {
						public void run() {
							ll.setText(new Date().toString());
						}
					});
				}
			}, 1000, 1000);
		}

		public void stop() {
			start = false;
		}
	}

你可能感兴趣的:(java,eclipse,多线程,虚拟机)