Java多线程编程一

线程的基本概念

线程:是一个程序里面不同的执行路径。

Java中的线程是通过Thread类来实现的,每一个Thread类对象代表一个新的线程。

  1. 通过创建Thread的实例来创建新的线程
  2. 每个线程通过每个特定Thread对象所对应的方法run()来完成其操作,也就是说将要执行的代码写在run()内,run方法称为线程体。
  3. 通过调用Thread类的start()方法来启动一个线程。

//通过继承Thread类来创建线程。Thread本身就继承了Runnable接口
public class TestThread1{
    public static void main(String args[]){
        Runner1  r = new Runner1();
        r.start();
        for(int i=0; i<100; i++){
            System.out.println(" Main ---" + i);
         }
     }
}
class Runner1 extends Threads{
    public void run(){

       for(int i=0; i<100; i++){
            System.out.println(" Runner1 ---" + i);
         }
    }
}


第二个实现线程的方法是实现Runnable接口。

//通过实现Runnable接口来创建线程
public class TestThread1{
    public static void main(String args[]){
        Runner1  r = new Runner1();
        Thread t = new Thread(r);
        t.start();
        for(int i=0; i<100; i++){
            System.out.println(" Main ---" + i);
         }
     }
}
class Runner1 implements Runnable{
    public void run(){
    for(int i=0; i<100; i++){
            System.out.println(" Runner1 ---" + i);
         }
    }
}

      经常需要使类在其自身线程中执行代码,但如果该类继承自Thread类,那么就不能继承其他类的功能,因为java不支持多重继承。与实现Runnable接口相比,Thread类的继承并无功能优势,这两种办法的难度也相当,因此经常将实现Runnable接口作为首选方法。

      更简单的方法是定义实现Runnable接口的匿名内类:

package com;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonPress extends JFrame {

	public static void main(String[] args){
		ButtonPress bp = new ButtonPress();
		bp.setSize(400, 300);
		bp.setVisible(true);
	}
	
	public ButtonPress(){
		JMenuBar jmb = new JMenuBar();
		JMenu menu = new JMenu("Execute");
		jmb.add(menu);
		JMenuItem jmi = new JMenuItem("Database Query");
		menu.add(jmi);
		jmi.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				Thread t = new Thread(new Runnable(){
					public void run(){
						performDatabaseQuery();
					}
				});
				t.start();
			}
		});
		setJMenuBar(jmb);
	}
	protected void performDatabaseQuery(){
		try{
			Thread.sleep(5000);
		}catch (Exception e){
			
		}
		;
	}
}


线程控制基本方法
方法功能
isAlive()判断线程是否活着,即线程是否还未终止
getPriority()获得线程的优先级数值
setPriority()设置线程的优先级数值
Thread.sleap()将当前线程睡眠指定毫秒数
join()调用某线程的该方法,将当前线程与该线程“合并”,即等待该线程结束,在恢复当前线程的运行
yield()让出cpu,当前线程进入就绪队列等待调度
wait()当前线程进入对象的wait pool
notify()/notifyAll()唤醒对象的wait pool中的一个/所有等待线程


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值