(1):主线程1启动了一个线程2, 在线程1里将线程2赋值为NULL,结果线程2根本不会结束
(2) 线程2实现Runnable接口实现线程的独立,在线程1中创建线程2的时候不用Thread x=new Thread(new myThread())的形式可以直接调用线程2的run()方法;
(3)当程序运行到线程2的死循环的时候,窗口不响应任何事件,让人感觉实在不是多线程.
在我的理解多线程应该是:线程可以控制线程,线程可以并发的运行.
下面是那个程序的代码://程序的作用是当在面板上双击鼠标的时候,在双击处有闪烁的光标
package zhou;
import javax.swing.JPanel;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class FreePanel extends JPanel implements MouseListener,MouseMotionListener
{
int x,y,clickCount; // 难道是这里JAVA修饰符的原因
Cursor cursor;
public FreePanel()
{
this.addMouseMotionListener(this);
this.addMouseListener(this);
}
public static void main(String []args)
{
JFrame frame=new JFrame("text");
frame.setSize(new Dimension(200,200));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new FreePanel());
frame.setVisible(true);
}
public void mouseEntered(MouseEvent e)
{}
public void mouseExited(MouseEvent e)
{}
public void mousePressed(MouseEvent e)
{
x=e.getPoint().x;
y=e.getPoint().y;
}
public void mouseReleased(MouseEvent e)
{}
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount()==2)
{
System.out.println("单击了两 次");
cursor=null;
cursor=new Cursor(x,y,this);
cursor.run();
System.out.println("可以执行到这里");// 这句是永远都执行不到的
}
}
public void mouseMoved(MouseEvent e)
{
x=e.getPoint().x;
y=e.getPoint().y;
this.repaint();
}
public void mouseDragged(MouseEvent e)
{}
public void dctionPerformed(ActionEvent e)
{
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);//这句的作用原来这么重要,没有它不能实现重新绘制
//图象,如果用repaint()方法的话,画面闪烁的像太阳耀斑爆发
g.drawString("("+x+","+y+")",x,y);
g.dispose();
}
}
class Cursor implements Runnable
{
FreePanel panel;
int x,y;
public Cursor(int x,int y,FreePanel panel)
{
this.panel=panel;
this.x=x;
this.y=y;
}
public void run()
{
while(true)
{
Graphics g=panel.getGraphics();
g.setColor(Color.BLACK);
g.drawLine(x,y-10,x,y);
try
{
Thread.sleep(200);
}
catch(InterruptedException e)
{
System.out.println("interruptedException");
}
g.setColor(panel.getBackground());
g.drawLine(x,y-10,x,y);
try
{
Thread.sleep(200);
}
catch(InterruptedException e)
{
System.out.println("interruptedException");
}
finally {
g.dispose();
}
}
}
}
是我的调用出现了问题,不是JAVA的多线程的问题,JAVA的多线程已经是经过无数次被证明的,在这里我不应该在遇到疑难问题的时候就怀疑JAVA, 不过也有一点让我同样感到可惜,因为几乎没有几个人怀疑JAVA的多线程,在某个条件下,多线程很可能会出现问题,这样的话应该是说给我自己听的,我老师就是这么说的