在java中,每一个程序至少有一个线程,就是主线程。而线程可以理解为程序内部一个独立的运行单位。线程的创建和实现主要有两种方式:
一是继承Thread类实现线程。这种方法尽管是一种多线程实现方式,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:
public class MyThread extends Thread {
public void run() {
System.out.println("线程启动");
}
}
在合适的地方启动线程如下:
MyThread myThread1 = new MyThread();
MyThread myThread2 = new MyThread();
myThread1.start();
myThread2.start();
二是通过实现Runnable接口创建和实现线程。
如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口,如下:
public class MyThread extends OneClass implements Runnable {
public void run() {
System.out.println("MyThread.run()");
}
}
为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();
事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:
public void run() {
if (target != null) {
target.run();
}
}
在运用线程的示例中,写的是小球在窗体上的运动。
下为小球运动的代码:
//窗体对象类
public class ThreadJFrame extends JFrame {
public static void main(String[] args){
ThreadJFrame jf = new ThreadJFrame();
jf.initUI();
}
public void initUI(){
this.setSize(400, 400);
this.setLayout(new FlowLayout());
JButton btn1 = new JButton("添加");
JButton btn2 = new JButton("开始");
JButton btn3 = new JButton("暂停");
this.add(btn1);
this.add(btn2);
this.add(btn3);
this.setVisible(true);
//监听器对象
ButtonActionListener l = new ButtonActionListener(this);
btn1.addActionListener(l);
btn2.addActionListener(l);
btn3.addActionListener(l);
}
}
//窗体监听器类
public class ButtonActionListener implements ActionListener {
ArrayList<DrawThread> list = new ArrayList<DrawThread>();
int count = 1;
JFrame jf;
public ButtonActionListener(JFrame jf){
this.jf=jf;
}
public void actionPerformed(ActionEvent e) {
if("添加".equals(e.getActionCommand())){
DrawThread thread = new DrawThread("Thread"+count++,jf);
thread.start();
list.add(thread);
}
else if("开始".equals(e.getActionCommand())){
for(int i = 0; i < list.size(); i++){
DrawThread thread = list.get(i);
thread.setRunFlag(true);
}
} else if("暂停".equals(e.getActionCommand())){
for(DrawThread thread : list){
thread.setRunFlag(false);
}
}
}
}
// 线程对象类(用第一种方法)
public class DrawThread extends Thread {
private static final int LEFT = 1;
private static final int RIGHT = 2;
private static final int UP = 3;
private static final int DOWN = 4;
private String name;
private Graphics g;
private int x=0,y=0;
private int lastX=0,lastY=0;
private JFrame jf;
private int x_derection = RIGHT;
private int y_derection = DOWN;
private boolean runFlag = true;
public DrawThread(String name, JFrame jf){
this.name = name;
this.jf = jf;
}
public void setRunFlag(boolean flag){
this.runFlag = flag;
}
public void run() {
while(true){
if(!runFlag){
try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
continue;
}
switch(x_derection) {
// x方向上小球的运动方式
case LEFT:
x -= 10;
break;
case RIGHT:
x += 10;
break;
}
switch(y_derection) {
// y方向上小球的运动方式
case UP:
y -= 10;
break;
case DOWN:
y += 10;
break;
}
if(x > jf.getWidth()-30){
x_derection = LEFT;
}
if(x <= 0)
x_derection = RIGHT;
if(y >= jf.getHeight()-30)
y_derection = UP;
if(y <= 30)
y_derection = DOWN;
g = jf.getGraphics();
g.clearRect(lastX, lastY, 30, 30);
g.setColor(Color.GREEN);
g.fillOval(x, y, 30, 30);
lastX = x;
lastY = y;
try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
这就是我对于线程的一些理解,可能还有我没有理解到的一些细节。语言的理解是一个过程,多接触就会越来越懂的,所以好好加油咯!!!
- 大小: 12.5 KB
分享到:
相关推荐
本篇将基于提供的文件名来探讨线程的相关知识点及其应用。 1. **线程基础** - 线程是操作系统分配CPU时间的基本单位,一个进程可以包含一个或多个线程。 - Java中通过`java.lang.Thread`类或者实现`Runnable`接口...
在实际应用中,开发者需要根据具体需求选择合适的线程模型,合理设计线程数量,以及有效管理线程的生命周期,以实现高效、稳定的并发执行。理解操作系统原理中的线程概念与应用,对于编写高效率、高性能的程序至关...
在VB6(Visual Basic 6...通过以上知识,我们可以利用VB6和Windows API实现稳定的多线程应用程序,提高程序的并发性和响应性。不过,多线程编程也具有一定的复杂性,需要谨慎设计和测试,以确保代码的正确性和可靠性。
本篇文章将深入探讨C语言和Java语言中的线程实现,以及如何在用户级别进行线程调度。 首先,我们来了解线程的基本概念。线程是操作系统分配CPU时间的基本单位,每个线程都有自己的程序计数器、栈、局部变量等,但...
以上就是MFC中利用多线程实现定时器的基本步骤。这种方法的优点是可以避免因`ontimer`事件阻塞主线程,使得程序更加响应。当然,实际开发中还需要考虑线程安全、资源管理等问题,确保代码的稳定性和效率。通过不断...
总结,这个"java多线程应用实现示例"通过小球运动的模拟,深入浅出地展示了Java多线程的运用,包括线程创建、同步、通信和线程池管理等关键概念。学习这个示例有助于理解和掌握Java多线程编程,为实际项目开发中的...
在Java中,实现多线程有两种主要方式:通过继承Thread类或者实现Runnable接口。本示例可能是一个Applet,Applet是Java小程序,它可以在Web浏览器中运行,展示了如何在Java环境中应用多线程。 首先,我们要理解线程...
### 在C#中编写多线程应用程序 #### 引言 多线程是现代软件开发中的一个重要概念,尤其是在像C#这样的高级编程语言中。它允许程序同时执行多个任务,从而提高了应用程序的性能和响应性。本文将详细介绍如何在C#中...
Java线程及多线程技术是Java编程中的核心概念,尤其在现代高性能应用程序开发中扮演着至关重要的角色。多线程允许程序同时执行多个独立的任务,从而提高系统资源的利用率和程序的响应速度。线程池是管理和控制线程的...
在VB6(Visual Basic 6)环境中,多线程是一个重要的技术,它允许程序同时执行多个独立的任务,提高应用程序的响应速度和效率。本篇主要介绍如何利用VB6实现多线程,以及涉及的关键概念和技术。 一、多线程概念 多...
一、PB9的多线程实现 在PB9中,虽然官方并未直接支持多线程,但开发者可以通过使用Windows API函数来实现。一种常见的方式是创建一个新的窗口类,该窗口类在不同的线程上运行。通过调用如CreateThread或BeginThread...
在IT行业中,多线程是实现并发执行任务的关键技术,特别是在服务器端开发、实时系统以及高性能计算等领域。本文将深入探讨“多线程实战应用”这一主题,结合提供的标签“源码”和“工具”,我们将从理论基础到实践...
本文将深入探讨如何使用Microsoft Foundation Classes (MFC) 库在C++中实现一个多线程的秒表应用。MFC是微软为Windows平台开发的C++类库,它提供了一种面向对象的方式来构建用户界面和应用程序。 首先,让我们理解...
在Java编程中,多线程和异步调用是提高应用程序性能和响应能力的重要手段。在本实例中,我们将深入探讨如何使用Java实现多线程以实现异步调用,并理解其背后的机制。 首先,多线程允许一个程序同时执行多个任务。在...
在"应用多线程实现多串口同时通信"这个主题中,我们将深入探讨如何利用多线程技术来实现多个串口的并发通信。 首先,串口通信是计算机与外部设备之间进行数据交换的一种方式,常用于工业控制、自动化设备、嵌入式...
综合方法,如Solaris操作系统,结合了用户级线程和内核级线程的优点,通过用户级线程库进行线程管理和调度,但在需要时可以利用内核级线程实现线程并行执行,避免了用户级线程的一些限制。 在不同的操作系统和平台...
—————————————————————————————————————————————————- java中的多线程 在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runabl
《多线程实现的模拟QQ程序详解》 在计算机编程领域,多线程技术是一种重要的并发执行机制,它允许多个任务在同一时刻运行,极大地提高了程序的效率和响应性。本篇文章将深入探讨如何利用多线程技术实现一个模拟QQ...
此外,还探讨了Java环境下多线程程序的开发及应用实践。 #### 关键词 多线程、同步、死锁、Java #### 1. Java多线程实现基础 Java的多线程机制使得开发者可以在一个程序中同时执行多个小型任务,从而显著提升...