java真的多线程吗

    (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的多线程,在某个条件下,多线程很可能会出现问题,这样的话应该是说给我自己听的,我老师就是这么说的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值