⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thread_2.java

📁 java 线程 静态锁
💻 JAVA
字号:
package thread_static_1_2;

class TestThread {
	public static Object lock=new Object();  //静态锁,锁类,不是锁对象了!!所以两个线程同时 运行两个 TestThread 的execute(),也可以同步!!!
		     public   void execute(){  //
			    	 synchronized(lock){ for(int i=0;i<20;i++){//和execute1() 是等效的!!!
				        	try {
								Thread.sleep(30);
							} catch (InterruptedException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
				            System.out.println(Thread.currentThread().getName()+Thread.currentThread().getName()+"    "+i);
					  }    
		          }
		     }
		     public  synchronized static void execute1(){  //如果这里不加 synchronized ,则不会同步,输出还是交错的!!因为,这个static 方法不用拿到锁就可以运行!!!
		    	 for(int i=0;i<20;i++){                    //和execute() 是等效的!!!
			        	try {
							Thread.sleep(30);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
			            System.out.println(Thread.currentThread().getName()+Thread.currentThread().getName()+"    "+i);
				  }    
	          }
		     public   static void execute2(){  //如果这里不加 synchronized ,则不会同步,输出还是交错的!!因为,这个static 方法不用拿到锁就可以运行!!!
		    	synchronized(TestThread.class){
		    	for(int i=0;i<20;i++){                    //和execute() 是等效的!!!
			        	try {
							Thread.sleep(30);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
			            System.out.println(Thread.currentThread().getName()+Thread.currentThread().getName()+"    "+i);
				  }  
		    	}
	          }
		     
		 
 }

 class ThreadA implements Runnable{
         TestThread test=null;
	    public ThreadA(TestThread pTest){  //对象有外部引入,这样 在需要的时候, 可以 保证是同一个对象,当然也可以传入不同的实例。比如下面main()。
             test=pTest;
        }
        public void run() {
            test.execute2();
}
    }
public class Thread_2{
			public static void main(String[] args){
				 TestThread test=new TestThread();//和下面的test2 生成不同的实例,也就要是 让两个线程 运行的是两个实例,再试验synchronized,
				 //
				 Runnable runabble=new ThreadA(test);
				 
				 TestThread test2=new TestThread();//
				 Runnable runabble2=new ThreadA(test2);
				
				 Thread a=new Thread(runabble,"A");                
				 a.start();
				 Thread b=new Thread(runabble2,"B");
				 b.start();

      }
			}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -