Java多线程编程一

线程的基本概念

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

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

  1. 通过创建Thread的实例来创建新的线程
  2. 每个线程通过每个特定Thread对象所对应的方法run()来完成其操作,也就是说将要执行的代码写在run()内,run方法称为线程体。
  3. 通过调用Thread类的start()方法来启动一个线程。
 1 //通过继承Thread类来创建线程。Thread本身就继承了Runnable接口
 2 public class TestThread1{
 3     public static void main(String args[]){
 4         Runner1  r = new Runner1();
 5         r.start();
 6         for(int i=0; i<100; i++){
 7             System.out.println(" Main ---" + i);
 8          }
 9      }
10 }
11 class Runner1 extends Threads{
12     public void run(){
13 
14        for(int i=0; i<100; i++){
15             System.out.println(" Runner1 ---" + i);
16          }
17     }
18 }

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

 1 //通过实现Runnable接口来创建线程
 2 public class TestThread1{
 3     public static void main(String args[]){
 4         Runner1  r = new Runner1();
 5         Thread t = new Thread(r);
 6         t.start();
 7         for(int i=0; i<100; i++){
 8             System.out.println(" Main ---" + i);
 9          }
10      }
11 }
12 class Runner1 implements Runnable{
13     public void run(){
14     for(int i=0; i<100; i++){
15             System.out.println(" Runner1 ---" + i);
16          }
17     }
18 }

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

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

 1 package com;
 2 import java.awt.*;
 3 import java.awt.event.*;
 4 import javax.swing.*;
 5 public class ButtonPress extends JFrame {
 6 
 7     public static void main(String[] args){
 8         ButtonPress bp = new ButtonPress();
 9         bp.setSize(400, 300);
10         bp.setVisible(true);
11     }
12     
13     public ButtonPress(){
14         JMenuBar jmb = new JMenuBar();
15         JMenu menu = new JMenu("Execute");
16         jmb.add(menu);
17         JMenuItem jmi = new JMenuItem("Database Query");
18         menu.add(jmi);
19         jmi.addActionListener(new ActionListener(){
20             public void actionPerformed(ActionEvent event){
21                 Thread t = new Thread(new Runnable(){
22                     public void run(){
23                         performDatabaseQuery();
24                     }
25                 });
26                 t.start();
27             }
28         });
29         setJMenuBar(jmb);
30     }
31     protected void performDatabaseQuery(){
32         try{
33             Thread.sleep(5000);
34         }catch (Exception e){
35             
36         }
37         ;
38     }
39 }

 

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


posted @ 2013-06-07 09:14  薛遗山  阅读(191)  评论(0编辑  收藏  举报