线程类里是一个循环 我如果开5个线程访问这个线程类 只能一个线程走完里面的循环才会进行第二个线程 问如何用多线程解决这个问题 我的目的是5个线程一起进到线程类里去一起完成这个循环 并且不会把循环的顺序搞乱 谢谢

解决方案 »

  1.   

    看你需要
    如果是一段代码要同步给代码加锁
    如果是方法给方法加。。class test1{
     private static final Object Lock = new Object();
     public void fun1() {
      // do somthing
      synchronized(Lock){
       // 同步代码
      }
     } // 同步方法
     public synchronized void fun2() {
      // 同步代码
     }
    }
      

  2.   

    真的不太理解,
    用同步锁锁住当前对象,将循环放在同步锁内可不可以?
    synchronized(this)
    {
    for(){
    }
    }
      

  3.   

    用mina 框架或者是nio就可以解决你的问题或者Socket 用线程池eg:Executer exec = Executors.newFixed……(线程池的数量)然后用exec.execute(执行你逻辑线程) 
      

  4.   


    好难理解阿,
    “线程类里是一个循环 我如果开5个线程访问这个线程类 只能一个线程走完里面的循环才会进行第二个线程”
    这个话本来就是错的,谁说只能一个线程走完才会进行第2个,除非加了锁,或者用了join()
    “我的目的是5个线程一起进到线程类里去一起完成这个循环 并且不会把循环的顺序搞乱”
    这话是什么意思呢?又要不把顺序搞坏,又要一起完成循环,单cpu执行线程本来就只能一个一个执行,什么叫一起完成阿?
      

  5.   

    真是太巧了,我刚编好下面的代码,lz就提出相同的问题了。
    试试看吧~~!import java.lang.Thread;public class ThreadClass { public static void main(String[] args) {
    try {
    InThreadClass t = new InThreadClass();
    for (int i = 0; i < 5; i++) {
    new Thread(t).start();
    }
    } catch (Exception e) {
    }
    System.out.println("over!!");
    }
    }class InThreadClass extends Thread { private int _I = 0;
    String str = new String(); public void run() {
    try {
    while (true) {
    synchronized (str) {
    if (_I > 1000) {
    break;
    }
    sleep(0);
    System.out
    .println(currentThread().getName() + " : Thread" + _I++);
    }
    }
    } catch (InterruptedException e) {
    }
    }
    }
      

  6.   

    如果出现楼主你说的那个现象,有四种可能:
    1.你的线程的run方法加锁了。
    2.你的run方法很快就运行完了,等不到后面的线程启动。所以你感觉是后面的线程等待前面的线程结束后才执行。
    3.你后面的线程wait前面的线程。
    4.你设置了线程的优先级。
    我感觉,除此以外好像没别的了。
      

  7.   

    public void run() {
    try {
    while (chinese wholesalers) {
    synchronized (str) {
    if (_I > 1000) {
    break; 
      

  8.   


    LZ认为多线程CPU效率比较高
      

  9.   

    目前我理解的就是。。一个可以使用锁定。第二个可以用sleep的大小来实现
      

  10.   

    这个建议很不错 mina这个框架很强大啊