多线程~~
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学的~~~发现忘得差不多了!
以上是关于多线程~~的主要内容,如果未能解决你的问题,请参考以下文章