java中的多线程
首先我们要知道的是何谓线程?线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。而什么是多线程?多线程基本的概念就是同时对多个任务加以控制。
多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。
使用线程的好处有: ·
1)可以把占据长时间的程序中的任务放到后台去处理。 ·
2)用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。
3)程序的运行速度可能加快。 ·
4)在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
使用线程的缺处有:
1)如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换。
2)更多的线程需要更多的内存空间。
3)线程可能会给程序带来更多“bug”,因此要小心使用。
4)线程的中止需要考虑其对程序运行的影响。
5)通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。
除了线程之外还有一个概念是进程,这两者有有何不同呢?
从一定意义上讲,进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,进程包含多个线程在运行。简单来说:一个应用程序就相当于一个进程,而线程是一个进程内部的多个运行单位。
结束一个线程,进程并不一定会结束,而关闭一个进程则所有线程都会结束。
package 线程入门; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class MyJFrame { private JFrame jf; public static void main(String[] args) { MyJFrame myjf = new MyJFrame(); myjf.inUnit(); } /** * 窗体初始化方法 */ public void inUnit(){ jf = new JFrame(); jf.setTitle("线程测试");//设置窗体标题 jf.setSize(600,700);//设置窗体大小 //jf.setLocationRelativeTo(null);//设置窗体在正中央显示 jf.setLayout(new FlowLayout()); jf.setDefaultCloseOperation(3);//关闭时程序结束运行 JButton btn = new JButton("ok"); btn.addActionListener(l); jf.add(btn); jf.setVisible(true);//设置窗体可见 } ActionListener l = new ActionListener(){ public void actionPerformed(ActionEvent e) { MyThread t = new MyThread(jf); //启动线程 t.start(); } }; }
package 线程入门; import java.awt.Color; import java.awt.Graphics; import java.util.Random; import javax.swing.JFrame; /** * 定义一个MyThread类 * @author Administrator * */ public class MyThread extends Thread{ private JFrame jf ; private int x,y; private int vx=1,vy=2; private int radius = 30; private Color color; public MyThread(JFrame jf){ this.jf = jf; Random r = new Random(); radius = r.nextInt(20)+10; vx = r.nextInt(10)+1; vy = r.nextInt(10)+1; color = new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256)); } public void run(){ Graphics g = jf.getGraphics(); while(true){ try{ Thread.sleep(100); }catch(InterruptedException e){ e.printStackTrace(); } //得到窗体的背景颜色 g.setColor(jf.getBackground()); g.fillOval(x, y, radius*2, radius*2); x+=vx; y+=vy; if(x<=0 || x > jf.getWidth()-radius*2){ //改变方向 vx = -vx; } if(y<=0 || y > jf.getHeight()-radius*2){ vy = -vy; } g.setColor(color); g.fillOval(x, y, radius*2, radius*2); } } }
相关推荐
java多线程总结
C#.net同步异步SOCKET通讯和多线程总结2[参照].pdf
MFC 多线程总结, 开发为于windows的应用程序开发
JAVA多线程总结
C#.net同步异步SOCKET通讯和多线程总结
C++多线程总结[归纳].pdf
C_同步异步SOCKET通讯和多线程总结.doc
C# 多线程总结,比较详细和全面,包含多种方式的多线程方法的说明。
java多线程总结
Java多线程总结.pdf
C#dotnet同步异步SOCKET通讯和多线程总结
C#.net同步异步SOCKET通讯和多线程总结 同步套接字通信 Socket支持下的网上点对点的通信 服务端实现监听连接,客户端实现发送连接请求,建立连接后进行发送和接收数据的功能 服务器端建立一个socket,设置好本机的ip...
这是我学习win32多线程的经验结晶,其中比较全面的叙述了WIN32多线程的基本编程方法。
CSOCKET同步异步通讯与多线程总结[定义].pdf
多线程的常见问题总结分析 1、多线程技术介绍 2、主线程介绍 3、创建线程的方式 4、线程中的异常问题 5、线程运行状态 6、线程第二种创建方式 7、多线程练习 8、线程安全问题分析和解决 9、多线程细节 10、同步使用...
关于Java编程中多线程的总结,是很难得的一个具有总结性的文档。