Callable和Runnable是不是也是(简单的)线程?
本帖最后由 jdgdf566 于 2013-11-30 21:39:52 编辑
实现了Callable或Runnable的类的实例是不是也是(简单的)线程?存在线程安全问题?
public static void main(String args[]) throws Exception {
for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Windows".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MyJFrame myJFrame = new MyJFrame();
myJFrame.setLocation(300, 300);
myJFrame.setVisible(true);
}
});
//现在我要改变myJFrame的位置,也就是运行myJFrame.setLocation(),怎么写?
}
现在我要改变myJFrame的位置,也就是运行myJFrame.setLocation(),在第16行处怎么写?
------解决方案--------------------你在匿名类里面申明的引用,在外面肯定拿不到啊。不能这样做。既然你需要在其他地方访问myJFrame,那你就要把这个引用放到外面来申明。
------解决方案--------------------
不是所有的实现了Runnable的类都是线程,Java线程只有一个就是Thread,Runnable也须要依靠Thread才能启动。
在你这里确实是在线程中运行的,那是因为你调用了SwingUtilities.invokeLater,但是你这里应该基本不存在线程安全问题。因为你在外面访问不到myJFrame,没有数据共享就不存在线程安全问题。