多线程~~

Posted 宋建楠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程~~相关的知识,希望对你有一定的参考价值。

counter1.java:

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Counter1 extends Applet {                 // 定义一个Applet类的子类Counter1
   private int count = 0;                              // 用于累加并在文本框中显示
   private Button onOff = new Button("Toggle");        // 构造了1个按钮
   private Button start = new Button("Start");         // 构造了1个按钮
   private TextField t = new TextField(10);            // 构造了1个文本框
   private boolean runFlag = true;                     // 一个标志变量
   private long i = 0;                                 // 循环变量

   public void init() {                                // 重写了父类Applet的init()方法
      add(t);                                          // 放置文本框t 到Applet小窗口
      start.addActionListener(new StartL());           // 注册按钮start-委托监听器StartL监听动作事件
      add(start);                                      // 放置按钮start 到Applet小窗口
      onOff.addActionListener(new OnOffL());           // 注册按钮onOff-委托监听器OnOffL监听动作事件
      add(onOff);                                      // 放置按钮onOff 到Applet小窗口
   }

   public static void main(String[] args) {             // 应用程序入口(用浏览器时不执行该部分代码)
      Counter1 applet = new Counter1();                 // 子类Counter1实例化-创建一个Applet小应用程序
      Frame aFrame = new Frame("Counter1");             // 创建一个Frame窗口--标题为Counter1a
      aFrame.addWindowListener(new WindowAdapter() {   
  public void windowClosing(WindowEvent e) {     // 关闭窗口-按钮事件-匿名类-适配器类-没机会执行
     System.exit(0);
  }
      });
      aFrame.add(applet, BorderLayout.CENTER);   // 将Applet小应用程序放置到窗口(框架)
                                                 // 可以充分利用 Application和Applet各自的优点
      aFrame.setSize(300, 100);                  // 默认布局为BorderLayout-居中
      applet.init();                             // Applet执行流程-1.init()初始化(装载)
      applet.start();                            // 2.start()功能化(运行)-3.paint()在浏览器中输出信息
      aFrame.setVisible(true);                   // 如果是在浏览器中运行Applet-以上方法会自动执行
      aFrame.setLocationRelativeTo(null);        // 设置窗体居中
   }

   public void go() {
      while (true) {
  i = 0;
  while (i <= 100000000) {                       // 循环一亿次-count加1-并在文本框显示
     i++;
  }                                              // 花费近千毫秒的时间-密集计算
  if (runFlag)                                   // 一旦开始-CPU没机会执行其他代码-耗费时间
    t.setText(Integer.toString(count++));
      }
   }

   class StartL implements ActionListener {             // 内部类-实现接口-响应按钮单击事件
      public void actionPerformed(ActionEvent e) {      // 实现接口的方法actionPerformed() 
  go();
      }
   }

   class OnOffL implements ActionListener {             // 内部类-实现接口-响应按钮单击事件
      public void actionPerformed(ActionEvent e) {      // 其实没执行的机会
   runFlag = !runFlag;                            // 一个标志变量
      }
   }
}

counter1a:

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Counter1 extends Applet implements Runnable{                 // 定义一个Applet类的子类Counter1
   private int count = 0;                              // 用于累加并在文本框中显示
   private Button onOff = new Button("Toggle");        // 构造了1个按钮
   private Button start = new Button("Start");         // 构造了1个按钮
   private TextField t = new TextField(10);            // 构造了1个文本框
   private boolean runFlag = true;                     // 一个标志变量
   private long i = 0;                                 // 循环变量
   Thread athread;

   public void init() {                                // 重写了父类Applet的init()方法
      add(t);                                          // 放置文本框t 到Applet小窗口
      start.addActionListener(new StartL());           // 注册按钮start-委托监听器StartL监听动作事件
      add(start);                                      // 放置按钮start 到Applet小窗口
      onOff.addActionListener(new OnOffL());           // 注册按钮onOff-委托监听器OnOffL监听动作事件
      add(onOff);                                      // 放置按钮onOff 到Applet小窗口
   }

   public static void main(String[] args) {             // 应用程序入口(用浏览器时不执行该部分代码)
      Counter1 applet = new Counter1();                 // 子类Counter1实例化-创建一个Applet小应用程序
      Frame aFrame = new Frame("Counter1");             // 创建一个Frame窗口--标题为Counter1a
      aFrame.addWindowListener(new WindowAdapter() {
  public void windowClosing(WindowEvent e) {     // 关闭窗口-按钮事件-匿名类-适配器类-没机会执行
     System.exit(0);
  }
      });
      aFrame.add(applet, BorderLayout.CENTER);   // 将Applet小应用程序放置到窗口(框架)
                                                 // 可以充分利用 Application和Applet各自的优点
      aFrame.setSize(300, 100);                  // 默认布局为BorderLayout-居中
      applet.init();                             // Applet执行流程-1.init()初始化(装载)
      applet.start();                            // 2.start()功能化(运行)-3.paint()在浏览器中输出信息
      aFrame.setVisible(true);                   // 如果是在浏览器中运行Applet-以上方法会自动执行
      aFrame.setLocationRelativeTo(null);        // 设置窗体居中
   }

   public void run() {
       System.out.println("已调用run()方法");
       while(true) {
           if (runFlag) {
               count++;
               System.out.println("count="+count);
           }
       }
   }

   class StartL implements ActionListener {             // 内部类-实现接口-响应按钮单击事件
      public void actionPerformed(ActionEvent e) {      // 实现接口的方法actionPerformed()
          Counter1a aCounter1a = new Counter1a();
             athread = new Thread(aCounter1a);
             athread.start();
             System.out.println("已经按下start按钮");
      }
   }

   class OnOffL implements ActionListener {             // 内部类-实现接口-响应按钮单击事件
      public void actionPerformed(ActionEvent e) {      // 其实没执行的机会
          System.out.println("已按下onOff按钮");
                          // 一个标志变量
      }
   }
}

mainthread:


public class MainThread
{
 public static void main(String args[])
 {
  Thread thread = Thread.currentThread();
  System.out.println("Thread info:" + thread);
  System.out.println("Thread Name:" + thread.getName());
  thread.setName("MyThread");
  System.out.println("new Name:" + thread.getName());
  try
  {
   for(int i=1;i<=10;i++)
   {
    System.out.println(i);
    thread.sleep(1000);
   }
  }
  catch(InterruptedException e)
  {
   System.out.println("main() is interrupted.");
  }
 }
}

复习一下以前JAVA学的~~~发现忘得差不多了!

以上是关于多线程~~的主要内容,如果未能解决你的问题,请参考以下文章

什么是多线程,多进程?

多线程和多进程模式有啥区别

多线程Java多线程学习笔记 | 多线程基础知识

java中啥叫做线程?啥叫多线程?多线程的特点是啥

c++ 多线程与c多线程有啥区别?

IOS多线程安全(线程锁)