A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唯爱丶 中级黑马   /  2015-9-13 18:30  /  3038 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

30黑马币
请教大神指点!

最佳答案

查看完整内容

//以电影院售票为例: //SellTickets售票方法继承自Thread import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class SellTickets extends Thread { public static int tickets = 100 ; // 创建锁对象 public static Lock lock = new ReentrantLock() ; @Override public void run() { while(true){ // 加锁 lock.lock() ; if(tickets > 0) ...

1 个回复

倒序浏览
//以电影院售票为例:
//SellTickets售票方法继承自Thread
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class SellTickets extends Thread {
       
        public static int tickets = 100 ;
       
       
         // 创建锁对象
         
        public static Lock lock = new ReentrantLock() ;

        @Override
        public void run() {
               
                while(true){
                       
                        // 加锁
                        lock.lock() ;
                       
                        if(tickets > 0) {
                                try {
                                        Thread.sleep(100) ;
                                } catch (InterruptedException e) {
                                        e.printStackTrace();
                                }
                                System.out.println(getName() + "出售第" + (tickets--) + "张票");
                        }
                       
                        // 释放锁
                        lock.unlock() ;
                }
        }
}

//测试类
public class ThreadTest {

        public static void main(String[] args) {
               
                // 创建线程对象
                SellTickets t1 = new SellTickets() ;
                SellTickets t2 = new SellTickets() ;
                SellTickets t3 = new SellTickets() ;
               
                // 给线程设置名称
                t1.setName("窗口1") ;
                t2.setName("窗口2") ;
                t3.setName("窗口3") ;
               
                // 启动线程
                t1.start() ;
                t2.start() ;
                t3.start() ;
        }
       
}
//Mythread类
public class MyThread extends Thread {
       
        private Object objA = new Object();
        private Object objB = new Object();
        private boolean flag ;
        public MyThread(boolean flag){
                this.flag = flag ;
        }
       
        @Override
        public void run() {
               
                if(flag){
                       
                        synchronized(objA){
                                System.out.println("true....objA......");
                                synchronized(objB){
                                        System.out.println("true....objB.....");
                                }
                        }
                       
                }else {
                       
                        synchronized(objB){
                                System.out.println("false....objB......");
                                synchronized(objA){
                                        System.out.println("false....objA.....");
                                }
                        }
                }
               
        }

}

  //测试类为:
  public class ThreadTest2{
       
        public static void main(String[] args) {
               
                // 创建线程对象
                MyThread t1 = new MyThread(true) ;
                MyThread t2 = new MyThread(false) ;
               
                // 启动线程
                t1.start() ;
                t2.start() ;
               
        }

}
//a:创建MyCallable类并实现Callable接口
  
  import java.util.concurrent.Callable;

public class MyCallable implements Callable {

        @Override
        public Object call() throws Exception {
               
                for(int x = 0 ; x < 100 ; x++){
                        System.out.println(Thread.currentThread().getName() + "----" + x);
                }
                return null;
        }

}

//b:创建测试类:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CallableTest {
       
        public static void main(String[] args) {
               
                // 创建对象
                MyCallable callable = new MyCallable() ;
               
                // 获取一个线程池
                ExecutorService executorService = Executors.newFixedThreadPool(2) ;
               
                // 提交任务
                executorService.submit(callable) ;
               
                // 关闭线程池
                executorService.shutdown() ;
        }

}

// 我们如何使用匿名内部类的方式实现多线程?
         
          public class MyThreadTest{
       
        public static void main(String[] args) {
               
                //两种方式: 使用Thread类
                new Thread() {
                        @Override
                        public void run() {
                                for(int x = 0 ; x < 100 ; x++){
                                        System.out.println(getName() + "---" + x);
                                }
                        }
                }.start();
               
                // 通过实现Runnable接口实现多线程
                new Thread(new Runnable() {
                        @Override
                        public void run() {
                                for(int x = 0 ; x < 100 ; x++){
                                        System.out.println(Thread.currentThread().getName() + "---" + x);
                                }
                        }
                }).start() ;
               
        }

}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马