1. 首页 > 科技

java中代码块被锁起来后多线程语句一直是一个线程在执行如下方代码,只有窗口1输出,求指点

java中代码块被锁起来后多线程语句一直是一个线程在执行如下方代码,只有窗口1输出,求指点

java中 synchronized同步处理后 为什么只有一个线程在运行呢?

当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。

Java这段多线程代码哪有问题?怎么打印结果是只执行了一个线程?

因为synchronized关键字控制了线程运行权限,相当于加一把锁,在ob运行完后才能运行其它线程,也就是说打印完当前线程结果后才会执行其它的线程,当启动t2线程想进入线程体时由于被synchronized锁住无法进去,其它线程也一样进不去,如果你把for(;x>0;){放到synchronized上面就能运行出4个线程

Java多线程死锁的问题

代码已修改,可能出现的问题,(1)sleep时间过短,线程2还没启动,票已卖完

(2)两个while是死循环,票卖完了没退出

(3)死锁的原因怀疑是两个Obj锁的冲突,可能是两个线程各拿到一个锁,均没有解锁机制,所以我删除了show方法中的obj锁

class Ticket implements Runnable

{

  Object obj = new Object();

  boolean flag = true;

         {

  while(tick>0)

  {

    synchronized(obj) //obj锁

    {           

    show();

    }

  }

 }

 else

 {

   while(tick>0)show();

         }

      }

      public synchronized void show(){    //this锁

          if(tick>0){

                try{

                    Thread.sleep(100);

                }catch(Exception e){

            }

            System.out.println(Thread.currentThread().getName()+"code.........:"+tick--);

        }

    }

}

public class DeadLockDemo

{

    public static void main(String[] args){

        Ticket t = new Ticket();

        Thread t1 = new Thread(t);

        Thread t2 = new Thread(t);

        t1.start();

        try{Thread.sleep(10);}catch(Exception e){}

        t.flag = false;

        t2.start();

    }

}

为什么我把同步锁放在while上面结果就是一个线程在执行run方法

final String url = "jdbc:oracle:thin:@localhost:1521:ORCL";

final String user = "store";

final String password = "store_password";

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection con = DriverManager.getConnection(url, user, password);

return con;

}