第一关:创建多线程

package step1;

public class CreateThreadPractice {

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        // ---------------------Begin------------------------
        //开启线程
        myThread.start();

        // ---------------------End------------------------
    }
}
// ---------------------Begin------------------------
//继承Thread编写名为MyThead的类,代码内容为循环输出10遍: 线程在运行......
class MyThread  extends Thread{
    public void run(){
        for(int i=0;i<10;i++){
            System.out.println("线程在运行......");
        }
    }
}


// ---------------------End------------------------


第二关:使用Callable接口创建多线程

package step2;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
// ---------------------Begin------------------------
//tips: 输出语句为:Thread.currentThread().getName()+"的call()方法在运行"
//定义一个实现Callable接口的实现类,类名必须命名为MyThread_callable


class MyThread_callable implements Callable<Object>{
    public Object call()throws Exception{
        for(int i=0;i<5;i++){
            System.out.println(Thread.currentThread().getName()+"的call()方法在运行");
        }
        return Thread.currentThread().getName();
    }
}

// ---------------------End------------------------
public class CallableExample {
    public static void main(String[] args) throws InterruptedException,
            ExecutionException {
        // 创建Callable接口的实现类对象
        MyThread_callable myThread3 = new MyThread_callable();
        // 使用FutureTask封装Callable接口
        FutureTask<Object> ft1 = new FutureTask<>(myThread3);
        // 使用Thread(Runnable target ,String name)构造方法创建线程对象
        Thread thread1 = new Thread(ft1, "thread1");
        // 创建并启动另一个线程thread2
        FutureTask<Object> ft2 = new FutureTask<>(myThread3);
        Thread thread2 = new Thread(ft2, "thread2");
        // ---------------------Begin------------------------
        // 调用线程对象的start()方法启动线程
        thread1.start();
        Thread.sleep(1000);
        thread2.start();
        Thread.sleep(1000);
        System.out.println("thread1返回结果:"+ft1.get());
        System.out.println("thread2返回结果:"+ft2.get());


        // 可以通过FutureTask对象的方法管理返回值
    
        // ---------------------End------------------------
    }
}

第三关:使用Runable接口创建多线程

package step3;
// ---------------------Begin------------------------
//定义一个实现Runnable接口的实现类,类名必须命名为MyThread_runable
//tips: 输出语句为:Thread.currentThread().getName()+"的run()方法在运行"
class MyThread_runable implements Runnable{
    public void run(){
        for(int i=0;i<3;i++)System.out.println(Thread.currentThread().getName()+"的run()方法在运行");
            
            
        }

    }





// ---------------------End------------------------


第四关:多线程中的售票问题

package step4;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class SellTicket extends Thread {
    //多线程共享资源,票数为30张
    public static int ticketnums = 30;
    // ---------------------Begin------------------------
    private static ReentrantLock lock = new ReentrantLock();
   //@Override
   public void run(){
       while(true){
               try{
                    lock.lock();
           if(ticketnums>0){
               try{
                   Thread.sleep(10);
               }catch(InterruptedException e) {
                   e.printStackTrace();}
            System.out.println("卖出了第"+ticketnums+"张票");
            ticketnums--;
           }else{
               System.out.println("票卖完了");
               System.exit(0);
           } 
           }finally{
               lock.unlock();
           }
       }
   }
    // ---------------------End------------------------
}

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐