java基础教程--线程

Box.java

public class Box {

     privateList<String> list=new ArrayList<String>();

     privateObject obj=new Object(); 

     publicvoid addString(String str){

         //token

         synchronized(obj){

              list.add(str);

         }        

     }

     publicsynchronized void removeString(String str){        

              list.remove(str);             

     }

}

BoxMain.java

public class BoxMain {

     publicstatic void main(String[] args) {

         finalBox box=new Box();        

         Threadt=new Thread(){

              publicvoid run(){

                   for(inti=0;i<100;i++){

                       box.addString("thread");//匿名的成员变量要使用final

                   }

              }

         };       

         t.start();

         for(inti=0;i<100;i++){

              box.addString("mian"+i);

         }   

     }

}

 

Counter.java

import java.util.Scanner;

public class Counter {

     privateStringBuffer buffer=new StringBuffer();

     publicvoid action(){

         PrintThreadthread=new PrintThread();

         thread.setDaemon(true);//设置该线程是否为守护线程

         //当JVM发现当前所有的线程都是守护线程的时候就自动退出

         thread.start();

         Scannerscanner= new Scanner(System.in);

         Stringstr;

         while((str=scanner.next())!=null){

              if("exit".equals(str)){

                   break;

              }                 

              buffer.append(str);

         }

     }

     publicstatic void main(String[] args){

         Countercounter=new Counter();

         counter.action();

     }

     privateclass PrintThread extends Thread{

         publicvoid run(){

              while(true){

                   System.out.println(buffer);

                   try{

                       Thread.sleep(5000);

                   }catch (InterruptedException e) {

                      

                   }

              }

         }

     }

}

             

进程process

线程thread   

        

线程状态:就绪<-->运行-->阻塞   结束

         /| \           |

          ---------------

方法:

    getPriority()获得优先级 优先级只能往低改不可往高改      

    run()

    setPriority()

    yield()

    Thread.currentThread()

    Thread.sleep(1000);          

         

线程安全的类:两个以上的线程同时访问该类的一个对象,

           不会有线程同步的问题:1)不可改变的类:例如:String 所有的包装类

                             2)可变类,但是synchornized  StringBuffer Vector Hashtable

线程不安全的类 StringBuilder ArrayList HashMap
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值