ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩av在线一区二区三区,粉嫩av国产一区二区三区,三级毛片在线免费看http://www.aygfsteel.com/zhengshuli-j2ee/category/38037.htmlzh-cnFri, 06 Mar 2009 07:42:57 GMTFri, 06 Mar 2009 07:42:57 GMT60java多线½E‹å­¦ä¹ æ€È»“http://www.aygfsteel.com/zhengshuli-j2ee/articles/258068.html郑舒åŠ?/dc:creator>郑舒åŠ?/author>Thu, 05 Mar 2009 12:49:00 GMThttp://www.aygfsteel.com/zhengshuli-j2ee/articles/258068.htmlhttp://www.aygfsteel.com/zhengshuli-j2ee/comments/258068.htmlhttp://www.aygfsteel.com/zhengshuli-j2ee/articles/258068.html#Feedback0http://www.aygfsteel.com/zhengshuli-j2ee/comments/commentRss/258068.htmlhttp://www.aygfsteel.com/zhengshuli-j2ee/services/trackbacks/258068.html ž®å¼Ÿçš„第二篇j2se学习½W”è®°åQŒå¦‚果有错误或者遗漏的地方åQŒè¿˜æŒ™¯·å„位高手老鸟们不要见½W‘,多给ž®å¼Ÿä¸€äº›æ‰¹è¯„ï¼Œå»ø™®®åQ?br />

一、线½E‹çš„基本概念
½Ž€å•çš„è¯ß_¼š¾U¿ç¨‹ž®±æ˜¯ä¸€ä¸ªç¨‹åºé‡Œä¸åŒçš„æ‰§è¡Œèµ\å¾?br /> 在同一个时间点上cpu只会有一个线½E‹åœ¨æ‰§è¡Œ
Java里的多线½E‹æ˜¯é€šè¿‡java.lang.Thread¾cÀL¥å®žçްçš?br /> 每个¾U¿ç¨‹éƒ½æ‹¥æœ‰è‡ªå·Þq‹¬ç«‹çš„æ–ÒŽ³•栈空é—?/p>

二、java¾U¿ç¨‹çš„创建和启动
½W¬ä¸€¿U?br />  å®šä¹‰¾U¿ç¨‹¾cÕd®žçްRunnable接口
 Thread myThread = new Thread(target) //target为Runnable接口¾cÕdž‹
 Runnable中只有一个方法:
 public void run();用以定义¾U¿ç¨‹˜qè¡Œä½?br /> ½W¬äºŒ¿U?br />  å¯ä»¥å®šä¹‰ä¸€ä¸ªThread的子¾cÕdƈ重写其runæ–ÒŽ³•åQ?br />   clas MyThread extends Thread{
   public void run(){}
  }
¾U¿ç¨‹¾cÕd¿…™å»é€šè¿‡æ‰§è¡ŒThreadçš„start()æ–ÒŽ³•启动一个新的线½E?br /> 如果调用run()æ–ÒŽ³•是属于方法的调用åQŒä¸ä¼šå¯åŠ¨ä¸€ä¸ªæ–°çš„çº¿½E?br /> 推荐使用½W¬ä¸€¿Uæ–¹å¼åˆ›å»ºçº¿½E‹ï¼Œä½¿ç”¨æŽ¥å£è¾ƒäؓ灉|´»

二、线½E‹çŠ¶æ€è£…æ?/span>
调用¾U¿ç¨‹start()æ–ÒŽ³•æ—Óž¼Œ¾U¿ç¨‹˜q›å…¥ž®ÞqÈA状态,Cpu分配旉™—´ç‰‡ï¼Œ¾U¿ç¨‹˜q›å…¥˜qè¡Œçжæ€?br /> æ—‰™—´ç‰‡ç»“束,run()æ–ÒŽ³•未执行完åQŒçº¿½E‹è¿›å…¥é˜»å¡žçŠ¶æ€ã€?/p>

三、线½E‹æŽ§åˆ¶åŸºæœ¬æ–¹æ³?/span>
 isAlive() //判断¾U¿ç¨‹æ˜¯å¦˜q?#8220;‹zȝ€”åQŒå³¾U¿ç¨‹æ˜¯å¦˜q˜æœª¾lˆæ­¢
 getPriority() //获得¾U¿ç¨‹çš„优先çñ”æ•°å€?br />  setPriority() //讄¡½®¾U¿ç¨‹çš„优先çñ”指数
 Thread.sleep() //静态方法,ž®†å½“前线½E‹ç¡çœ æŒ‡å®šæ¯«¿U’æ•°
 join()  //调用某线½E‹çš„该方法,ž®†å½“前线½E‹ä¸Žè¯¥çº¿½E‹åˆòqÓž¼Œ
   //即等待该¾U¿ç¨‹¾l“束åQŒå†å›žå¤å½“前¾U¿ç¨‹çš„运行ã€?br />  yield()  //让出CPUåQŒå½“前线½E‹è¿›å…¥å°±¾lªçŠ¶æ€ç­‰å¾…è°ƒåº?br />  interrupt() //中断¾U¿ç¨‹
 wait()  //当前¾U¿ç¨‹˜q›å…¥å¯¹è±¡çš„wait pool
 notify()/all //唤醒对象的wait pool中的一ä¸?所有等待线½E?/p>

四、sleepæ–ÒŽ³•
 Thread的静态方æ³?br />  public static void sleep(long millis)throws InterruptedException
 å¿…须对异常进行捕æ?br />  Thread.currentThread();  //拿到当前¾U¿ç¨‹

五、interruptæ–ÒŽ³•一¿Uè®©¾U¿ç¨‹é€€å‡ºçš„æ–¹å¼ã€?

import java.util.*;
public class TestInterrupt{
    
public static void main(String[] args){
        MyThread t 
= new MyThread();
        t.start();
        
try{Thread.sleep(10000);}
        
catch(InterruptedException i){}
        t.interrupt();
    }
}

class MyThread extends Thread{
    
public void run(){
        
while(true){
            
try{
                System.out.println(
"------"+new Date()+"-----");
                Thread.sleep(
1000);
            }
catch(InterruptedException i){
                
return;
            }
        }
    }
}


六、joinå’Œyieldæ–ÒŽ³• 
 t.join(); //tçš„run()æ–ÒŽ³•完才会ç‘ô¾l­æ‰§è¡Œå½“前线½E‹æ–¹æ³•体
   //也就是两个线½E‹å˜æˆäº†ä¸€ä¸ªçº¿½E?br />  t.yield(); //暂停当前正在执行的线½E‹å¯¹è±¡ï¼Œòq¶æ‰§è¡Œå…¶ä»–线½E‹ã€‚æ–¹æ³•äØ“é™æ€?br />    //哪个¾U¿ç¨‹ä½“执行此æ–ÒŽ³•åQŒå“ªä¸ªçº¿½E‹è®©æ­?br />

public class TestYield {
  
public static void main(String[] args) {
    MyThread3 t1 
= new MyThread3("t1");
    MyThread3 t2 
= new MyThread3("t2");
    t1.start(); t2.start();
  }
}
class MyThread3 extends Thread {
  MyThread3(String s){
super(s);}
  
public void run(){
    
for(int i =1;i<=100;i++){
      System.out.println(getName()
+""+i);
      
if(i%10==0){
        yield();
      }
    }
  }
}


七、线½E‹ä¼˜å…ˆçñ”åˆ?nbsp;
 ¾U¿ç¨‹çš„优先çñ”用数字表½Cºï¼ŒèŒƒå›´ä»?åˆ?0åQŒä¸€ä¸ªçº¿½E‹çš„¾~ºçœä¼˜å…ˆ¾U§äØ“5.
 Thread.MAX_PRIORITY=1
 Thread.MIN_PRIORITY=10
 Thread.NORM_PRIORITY=5
 ä¾‹ï¼št.setPriority(Thread.NORM_PRIORITY+3);
 
★八、线½E‹åŒæ­?/span>
 1.同步代码å?br />  synchronized(this){  //在执行代码块˜q‡ç¨‹ä¸­ï¼Œä¸ä¼šè¢«å…¶ä»–线½E‹æ‰“æ–?br />   ...  
 }
 public sunchronized void method //执行此方法时åQŒå½“前对象被锁定
 åœ¨Java语言中,引入了对象互斥锁的概念,保证å…׃ín数据操作的完整性,每个对象 éƒ½å¯¹åº”一个可¿UîCØ“"互斥é”?的标讎ͼŒ˜q™ä¸ªæ ‡è®°ä¿è¯åœ¨ä“Q一时刻åQŒåªèƒ½æœ‰ä¸€ä¸ªçº¿½E‹è®¿ é—®è¯¥å¯¹è±¡ã€?br />  2.¾U¿ç¨‹æ­»é”

public class TestDeadLock implements Runnable {
    
public int flag = 1;
    
static Object o1 = new Object(), o2 = new Object();
    
public void run() {
System.out.println(
"flag=" + flag);
        
if(flag == 1) {
            
synchronized(o1) {
                
try {
                    Thread.sleep(
500);
                } 
catch (Exception e) {
                    e.printStackTrace();
                }
                
synchronized(o2) {
                    System.out.println(
"1");    
                }
            }
        }
        
if(flag == 0) {
            
synchronized(o2) {
                
try {
                    Thread.sleep(
500);
                } 
catch (Exception e) {
                    e.printStackTrace();
                }
                
synchronized(o1) {
                    System.out.println(
"0");
                }
            }
        }
    }    
    
    
public static void main(String[] args) {
        TestDeadLock td1 
= new TestDeadLock();
        TestDeadLock td2 
= new TestDeadLock();
        td1.flag 
= 1;
        td2.flag 
= 0;
        Thread t1 
= new Thread(td1);
        Thread t2 
= new Thread(td2);
        t1.start();
        t2.start();
        
    }
}


九、生产者消费者问�br />

public class ProducerConsumer {
    
public static void main(String[] args) {
        SyncStack ss 
= new SyncStack();
        Producer p 
= new Producer(ss);
        Consumer c 
= new Consumer(ss);
        
new Thread(p).start();
        
new Thread(p).start();
        
new Thread(p).start();
        
new Thread(c).start();
    }
}

class WoTou {
    
int id; 
    WoTou(
int id) {
        
this.id = id;
    }
    
public String toString() {
        
return "WoTou : " + id;
    }
}

class SyncStack {        //栈实çŽ?/span>
    int index = 0;
    WoTou[] arrWT 
= new WoTou[6];    //相当于装物品的篮å­?/span>
    
    
public synchronized void push(WoTou wt) {    //生äñ”物品åQŒçº¿½E‹å®‰å…?/span>
        while(index == arrWT.length) {        //当篮子满了线½E‹ç­‰å¾?/span>
            try {            
                
this.wait();        
            } 
catch (InterruptedException e) {
                e.printStackTrace();
            }
            
        }
        
this.notifyAll();    //开始生产时åQŒå«é†’等待的其他¾U¿ç¨‹å¼€å§‹æ¶ˆè´?/span>
        arrWT[index] = wt;    
        index 
++;
    }
    
    
public synchronized WoTou pop() {        //消费物品åQŒçº¿½E‹å®‰å…?/span>
        while(index == 0) {            //如果½‹®å­½IÞZº†
            try {
                
this.wait();        //¾U¿ç¨‹½{‰å¾…,½{‰å¾…生äñ”者开å§?nbsp;                           //生äñ”åQŒå«é†’æ­¤¾U¿ç¨‹
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            
        }
        
this.notifyAll();            //消费时喊醒生产者生äº?/span>
        index--;
        
return arrWT[index];
    }
}

class Producer implements Runnable {            //生äñ”者类
    SyncStack ss = null;
    Producer(SyncStack ss) {
        
this.ss = ss;
    }
    
    
public void run() {
        
for(int i=0; i<20; i++) {    //生äñ”20ä¸?/span>
            WoTou wt = new WoTou(i);
            ss.push(wt);            
            System.out.println(
"生äñ”了:" + wt);
            
try {
                Thread.sleep((
int)(Math.random() * 200));
            } 
catch (InterruptedException e) {
                e.printStackTrace();
            }            
        }
    }
}

class Consumer implements Runnable {
    SyncStack ss 
= null;
    Consumer(SyncStack ss) {
        
this.ss = ss;
    }
    
    
public void run() {
        
for(int i=0; i<20; i++) {        //消费20ä¸?/span>
            WoTou wt = ss.pop();
            System.out.println(
"消费äº? " + wt);
            
try {
                Thread.sleep((
int)(Math.random() * 1000));
            } 
catch (InterruptedException e) {
                e.printStackTrace();
            }            
        }
    }
}


]]>
J2SE IO‹¹API学习½W”è®°http://www.aygfsteel.com/zhengshuli-j2ee/articles/257482.html郑舒åŠ?/dc:creator>郑舒åŠ?/author>Tue, 03 Mar 2009 02:21:00 GMThttp://www.aygfsteel.com/zhengshuli-j2ee/articles/257482.htmlhttp://www.aygfsteel.com/zhengshuli-j2ee/comments/257482.htmlhttp://www.aygfsteel.com/zhengshuli-j2ee/articles/257482.html#Feedback0http://www.aygfsteel.com/zhengshuli-j2ee/comments/commentRss/257482.htmlhttp://www.aygfsteel.com/zhengshuli-j2ee/services/trackbacks/257482.html关于java IO‹¹å­¦ä¹ æ€È»“

一、IO‹¹çš„三种分类方式
    1.按流的方向分为:输入‹¹å’Œè¾“出‹¹?br />     2.按流的数据单位不同分为:字节‹¹å’Œå­—符‹¹?br />     3.按流的功能不同分为:节点‹¹å’Œå¤„理‹¹?br /> 二、IO‹¹çš„四大抽象¾c»ï¼š
 å­—符‹¹ï¼šReader Writer
 å­—节‹¹ï¼šInputStream(è¯ÀL•°æ? 
  OutputStream(写数æ?
三、InputStream的基本方æ³?br />  int read() throws IOException è¯Õd–一个字节以整数形式˜q”回åQŒå¦‚果返å›?1已到输入‹¹çš„æœ«å°¾
 void close() throws IOException å…³é—­‹¹é‡Šæ”‘Ö†…存资æº?br />  long skip(long n) throws IOException è·Œ™¿‡n个字节不è¯?/p>

四、OutputStream的基本方�/span>
 void write(int b) throws IOException å‘输出流写入一个字节数 æ?br />  void flush() throws IOException ž®†è¾“出流中缓冲的数据全部写出到目的地
五、Writer的基本方�/span>
 void write(int c) throws IOException å‘输出流写入一个字½W¦æ•°æ?br />  void write(String str) throws IOException
 ž®†ä¸€ä¸ªå­—½W¦ä¸²ä¸­çš„字符写入到输出流
 void write(String str,int offset,int length)
 ž®†ä¸€ä¸ªå­—½W¦ä¸²ä»Žoffset开始的length个字½W¦å†™å…¥åˆ°è¾“出‹¹?br />  void flush() throws IOException ž®†è¾“出流中缓冲的数据全部写出到目的地
六、Reader的基本方�/span>
 int read() throws IOException è¯Õd–一个字½W¦ä»¥æ•´æ•°å½¢å¼˜q”回åQŒå¦‚果返å›?1已到输入‹¹çš„æœ«å°¾

七、节ç‚ÒŽµ¾cÕdž‹

八、访问文件之FileInputStreamå’ŒFileOutputStream¾l§æ‰¿åŸºç±»ç”¨äºŽå‘文件中输入输出字节

九、访问文件之FileReaderå’ŒFileWriter¾l§æ‰¿åŸºç±»ç”¨äºŽå‘文件中输入输出字符
----输出‹¹åœ¨æž„造函数第二个参数可以讄¡½®trueæ„ä¹‰ä¸ø™·Ÿåœ¨å·²æœ‰æ–‡ä»¶åŽ˜q›è¡Œè¾“å…¥
----此类‹¹ä¼šæŠ›å‡ºFileNotFoundException需要对其进行显½Cºæ•æ?/p>

十、缓冲流åQšç¼“冲流要套接在相应的节ç‚ÒŽµä¹‹ä¸ŠåQŒæé«˜äº†è¯Õd†™çš„æ•ˆçއã€?br />      此处理流的构造方法都得传相对应的基类¾cÕdž‹
    
BufferedReaderåQšæä¾›äº†readLineæ–ÒŽ³•用于高校è¯Õd–一行字½W¦ä¸²
BufferedWriteråQšæä¾›äº†newLine用于写入一个行分隔½W¦ä¹Ÿž®±æ˜¯æ¢è¡Œ
BufferedInputStream æ²¡å¤šå¤§ç”¨å¤?br /> BufferedOutputStream æ²¡å¤šå¤§ç”¨å¤?/p>

十一、è{换流åQšä¸»è¦ä½œç”¨å°†å­—节‹¹è{换成字符‹¹ã€‚用处较大!
       转换‹¹åœ¨æž„造时可以指定其编码集å?br />  
 InputStreamReader需要和InputStream套接
 OutputStreamWriter需要和OutputStream套接
 ä¾‹ï¼šOutputStreamWriter osw = new OutputStreamWriter (
    new FileOutputStream(æ–‡äšg路径);
 æ–ÒŽ³•例:osw.getEncoding(); èŽ·å¾—‹¹çš„¾~–码方式

十二、数据流与字节数¾l„流åQ?/span>
 æ•°æ®‹¹ä¸»è¦äؓ实现可以存取Java原始数据¾cÕdž‹å¦‚long,boolean
 æ•°æ®‹¹æ˜¯å­—节‹¹?br />  DataInputStream需要和InputStream套接
 DataOutputStream需要和OutputStream套接
 DataInputStreamæ–ÒŽ³•:readBoolean() readInt() read...()...
 readUTF()åQšç½‘¾lœä¼ è¾“常用方æ³?è¯ÖM¸€ä¸ªUnicode字符ä¸?br />  DataOutputStreamæ–ÒŽ³•与DataInputStream基本对应为写的方æ³?br />  //此构造函数等于已可以往一个字节数¾l„里输入内容
 ByteArrayOutputStream baos = new ByteArrayOutputStream ();
 //æ­¤æ–¹æ³•äØ“èŽ·å–ä¸€ä¸ªå­—èŠ‚æ•°¾l„方法返回字节数¾l?br />  baos.toByteArray();
 //此方法获取字节数¾l„占了多ž®‘å­—èŠ?br />  new ByteArrayInputStream(一个字节数¾l?.available()

 1ByteArrayOutputStream baos = 
 2                        new ByteArrayOutputStream(); 
 3    DataOutputStream dos = 
 4                        new DataOutputStream(baos);
 5    try {
 6      dos.writeDouble(Math.random());
 7      dos.writeBoolean(true);
 8      ByteArrayInputStream bais = 
 9          new ByteArrayInputStream(baos.toByteArray());
10      System.out.println(bais.available());
11      DataInputStream dis = new DataInputStream(bais);
12      System.out.println(dis.readDouble());
13      System.out.println(dis.readBoolean());
14      dos.close();  dis.close();
15    }
 catch (IOException e) {
16      e.printStackTrace();
17    }

 

十二、Print‹¹?/span>
 Print‹¹åªæœ‰è¾“出流无输入流,PrintWriterå’ŒPrintStream分别针对字符字节
 ä¸¤ä¸ª¾cÀLä¾›äº†é‡è²çš„Printå’ŒPrintlnæ–ÒŽ³•用于多种数据¾cÕdž‹çš„输å‡?br />  PrintWriterå’ŒPrintStream的输出操作不会抛出异å¸?br />  PrintWriterå’ŒPrintStream有自动flush功能
 ----System.setOut(接收OutputStream¾c?:用于讄¡½®¾pȝ»Ÿé»˜è®¤è¾“出‹¹?/p>

十二、Object‹¹?/span>
 ½{‰åŒäºŽc#序列化,用直接将Object写入或读å‡?br />  transientå…³é”®å­—äØ“ä¸åºåˆ—åŒ–æ­¤æˆå‘˜å˜é‡?br />  éœ€è¦åºåˆ—化的类必须实现Serializable接口
 ä¸»è¦æ–ÒŽ³•:writeObject(Object); readObject();
 è¯Õd‡ºä¸ºObject¾cÕdž‹éœ€è¦å¼ºè½¬æ•°æ®ç±»åž?/p>

 1 import java.io.*;
 2 
 3 public class TestObjectIO {
 4     public static void main(String args[]) throws Exception {
 5         T t = new T();
 6         t.k = 8;
 7         FileOutputStream fos = new FileOutputStream("d:/share/java/io/testobjectio.dat");
 8         ObjectOutputStream oos = new ObjectOutputStream(fos);
 9         oos.writeObject(t);
10         oos.flush();
11         oos.close();
12         
13         FileInputStream fis = new FileInputStream("d:/share/java/io/testobjectio.dat");
14         ObjectInputStream ois = new ObjectInputStream(fis);
15         T tReaded = (T)ois.readObject();
16         System.out.println(tReaded.i + " " + tReaded.j + " " + tReaded.d + " " + tReaded.k);
17         
18     }
19 }
20 
21 class T 
22     implements Serializable
23 {
24     int i = 10;
25     int j = 9;
26     double d = 2.3;
27     transient int k = 15;
28 }


]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º Ê¯Ì¨ÏØ| »ªÒõÊÐ| ÑÓÊÙÏØ| ·ïÏèÏØ| ¼ªÄ¾Èø¶ûÏØ| ¸¢ÁêÇø| ¶«ÎÚÖéÄÂÇ߯ì| äÓÆÖÏØ| ÈÕ¿¦ÔòÊÐ| ½ð̳ÊÐ| Ì©À´ÏØ| Íû½­ÏØ| ½¨ÑôÊÐ| ½õÖÝÊÐ| °²¼ªÏØ| ÁèÔ´ÊÐ| ºÍÁúÊÐ| µ±Í¿ÏØ| Îâ½­ÊÐ| ÄÏͶÊÐ| ʯÊ×ÊÐ| ÎÄË®ÏØ| ¾ÅÕ¯¹µÏØ| ÓÀÊÙÏØ| ÏɾÓÏØ| Ìì×£| ƽ¶ÈÊÐ| ²ý¶¼ÏØ| ÁÖÖÜÏØ| çõ´ºÊÐ| ´óÒØÏØ| äµÔ´ÏØ| ÇìÔªÏØ| ÓÀÖÝÊÐ| ·áÄþ| ТÒåÊÐ| µÂÖÝÊÐ| ºâÉ½ÏØ| ¹óÖÝÊ¡| ÐðÓÀÏØ| ³±°²ÏØ|