`
打酱油的小瓶子
  • 浏览: 8114 次
最近访客 更多访客>>
lso
社区版块
存档分类

多线程总结

    博客分类:
  • java
 
阅读更多

                                                        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);
		 }
	}
}

 


 

  • 大小: 25.2 KB
1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics