2019最新爱前端php开发五阶段精通项目实战(完整)

 
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
 
/**
 * jvm 时间不对的测试方法
 *
 */
public class Test {
    public static void main(String[] args) {
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:SS").format(new Date()));
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:SS");
        LocalDateTime localDate = LocalDateTime.now();
        System.out.println(localDate.format(dateTimeFormatter));
 
    }
}
public class AccountingSync implements Runnable{
    //共享资源(临界资源)
    static int i=0;
    /**
      * synchronized 修饰实例方法
      */
     public synchronized void increase(){
         i++;
     }
     @Override
     public void run() {
         for(int j=0;j<1000000;j++){
             increase();
         }
     }
     public static void main(String[] args) throws InterruptedException {
         AccountingSync instance=new AccountingSync();
         Thread t1=new Thread(instance);
         Thread t2=new Thread(instance);
         t1.start();
         t2.start();
         t1.join();
         t2.join();
         System.out.println(i);
     }
     /**
       * 输出结果:
       * 2000000
       */
}
public class AccountingSyncBad implements Runnable{
    static int i=0;
     public synchronized void increase(){
         i++;
     }
     @Override
     public void run() {
         for(int j=0;j<1000000;j++){
             increase();
         }
     }
     public static void main(String[] args) throws InterruptedException {
         //new新实例
         Thread t1=new Thread(new AccountingSyncBad());
         //new新实例
         Thread t2=new Thread(new AccountingSyncBad());
         t1.start();
         t2.start();
         //join含义:当前线程A等待thread线程终止之后才能从thread.join()返回
         t1.join();
         t2.join();
         System.out.println(i);
     }
}
public class AccountingSyncClass implements Runnable{
     static int i=0;
     /**
       * 作用于静态方法,锁是当前class对象,也就是
       * AccountingSyncClass类对应的class对象
       */
     public static synchronized void increase(){
         i++;
     }
     /**
       * 非静态,访问时锁不一样不会发生互斥
       */
     public synchronized void increase4Obj(){
         i++;
     }
     @Override
     public void run() {
         for(int j=0;j<1000000;j++){
             increase();
         }
     }
     public static void main(String[] args) throws InterruptedException {
         //new新实例
         Thread t1=new Thread(new AccountingSyncClass());
         //new心事了
         Thread t2=new Thread(new AccountingSyncClass());
         //启动线程
         t1.start();t2.start();
         t1.join();t2.join();
         System.out.println(i);
     }
}
public class AccountingSync implements Runnable{
     static AccountingSync instance=new AccountingSync();
     static int i=0;
     @Override
     public void run() {
         //省略其他耗时操作....
         //使用同步代码块对变量i进行同步操作,锁对象为instance
         synchronized(instance){
             for(int j=0;j<1000000;j++){
                 i++;
             }
         }
     }
     public static void main(String[] args) throws InterruptedException {
         Thread t1=new Thread(instance);
         Thread t2=new Thread(instance);
         t1.start();t2.start();
         t1.join();t2.join();
         System.out.println(i);
     }
}
public class AccountingSync implements Runnable{
     static AccountingSync instance=new AccountingSync();
     static int i=0;
     static int j=0;
     @Override
     public void run() {
         for(int j=0;j<1000000;j++){
         //this,当前实例对象锁
         synchronized(this){
             i++;
             increase();//synchronized的可重入性
         }
     }
     }
     public synchronized void increase(){
         j++;
     }
     public static void main(String[] args) throws InterruptedException {
         Thread t1=new Thread(instance);
         Thread t2=new Thread(instance);
         t1.start();t2.start();
         t1.join();t2.join();
         System.out.println(i);
     }
}
public class InterruputSleepThread3 {
     public static void main(String[] args) throws InterruptedException {
         Thread t1 = new Thread() {
             @Override
             public void run() {
                 //while在try中,通过异常中断就可以退出run循环
                 try {
                     while (true) {
                         //当前线程处于阻塞状态,异常必须捕捉处理,无法往外抛出
                         TimeUnit.SECONDS.sleep(2);
                     }
                 } catch (InterruptedException e) {
                     System.out.println("Interruted When Sleep");
                     boolean interrupt = this.isInterrupted();
                     //中断状态被复位
                     System.out.println("interrupt:"+interrupt);
                 }
             }
         };
         t1.start();
         TimeUnit.SECONDS.sleep(2);
         //中断处于阻塞状态的线程
         t1.interrupt();
         /**
           * 输出结果:
             Interruted When Sleep
             interrupt:false
           */
     }
}
public class InterruputThread {
     public static void main(String[] args) throws InterruptedException {
         Thread t1=new Thread(){
             @Override
             public void run(){
                 while(true){
                     System.out.println("未被中断");
                 }
             }
         };
         t1.start();
         TimeUnit.SECONDS.sleep(2);
         t1.interrupt();
         /**
           * 输出结果(无限执行):
             未被中断
             未被中断
             未被中断
             ......
           */
     }
}
public class InterruputThread {
     public static void main(String[] args) throws InterruptedException {
         Thread t1=new Thread(){
             @Override
             public void run(){
                 while(true){
                 //判断当前线程是否被中断
                 if (this.isInterrupted()){
                     System.out.println("线程中断");
                     break;
                 }
             }
             System.out.println("已跳出循环,线程中断!");
             }
         };
         t1.start();
         TimeUnit.SECONDS.sleep(2);
         t1.interrupt();
         /**
           * 输出结果:
             线程中断
             已跳出循环,线程中断!
           */
     }
}
public void run(){
     try {
         //判断当前线程是否已中断,注意interrupted方法是静态的,执行后会对中断状态进行复位
         while (!Thread.interrupted()) {
             TimeUnit.SECONDS.sleep(2);
         }
     } catch (InterruptedException e) {
     }
}
public class SynchronizedBlocked implements Runnable{
     public synchronized void f() {
         System.out.println("Trying to call f()");
         while(true) // Never releases lock
         Thread.yield();
     }
     /**
       * 在构造器中创建新线程并启动获取对象锁
       */
     public SynchronizedBlocked() {
         //该线程已持有当前实例锁
         new Thread() {
             public void run() {
                 f(); // Lock acquired by this thread
             }
         }.start();
     }
     public void run() {
         //中断判断
         while (true) {
             if (Thread.interrupted()) {
                 System.out.println("中断线程!!");
                 break;
             } else {
                 f();
             }
         }
     }
     public static void main(String[] args) throws InterruptedException {
         SynchronizedBlocked sync = new SynchronizedBlocked();
         Thread t = new Thread(sync);
         //启动后调用f()方法,无法获取当前实例锁处于等待状态
         t.start();
         TimeUnit.SECONDS.sleep(1);
         //中断线程,无法生效
         t.interrupt();
     }
}

public abstract interface ExecutorService extends Executor {
public abstract void shutdown();

public abstract List<Runnable> shutdownNow();

public abstract boolean isShutdown();-------是不是结束了

public abstract boolean isTerminated();

public abstract boolean awaitTermination(long paramLong,-------------等待结束
        TimeUnit paramTimeUnit) throws InterruptedException;

public abstract <T> Future<T> submit(Callable<T> paramCallable);--------提交

public abstract <T> Future<T> submit(Runnable paramRunnable, T paramT);

public abstract Future<?> submit(Runnable paramRunnable);

public abstract <T> List<Future<T>> invokeAll(   ------------------------调用所有
        Collection<? extends Callable<T>> paramCollection)
        throws InterruptedException;

public abstract <T> List<Future<T>> invokeAll(
        Collection<? extends Callable<T>> paramCollection, long paramLong,
        TimeUnit paramTimeUnit) throws InterruptedException;

public abstract <T> T invokeAny(
        Collection<? extends Callable<T>> paramCollection)
        throws InterruptedException, ExecutionException;

public abstract <T> T invokeAny(
        Collection<? extends Callable<T>> paramCollection, long paramLong,
        TimeUnit paramTimeUnit) throws InterruptedException,
        ExecutionException, TimeoutException;
}    

public class TestFuture {
public static void main(String[] args) {
    ExecutorService executor = Executors.newCachedThreadPool();
    Task task = new Task();
    Future<Integer> result = executor.submit(task); // 将来要执行的任务。执行后返回值
    executor.shutdown();

    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    System.out.println("主线程在执行任务");

    try {
        System.out.println("task运行结果"+result.get());
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }

    System.out.println("所有任务执行完毕");
}
}
class Task implements Callable<Integer>{
  @Override
public Integer call() throws Exception {
    System.out.println("子线程在进行计算");
    Thread.sleep(3000);
    int sum = 0;
    for(int i=0;i<100;i++)
        sum += i;
    return sum;
}
}

public class MyCachePool {
 public static void main(String[] args) throws InterruptedException,ExecutionException{
    ExecutorService service = Executors.newCachedThreadPool();

    System.out.println(service);

    for(int i = 0; i < 2; i++) {
        service.execute(()->{
            try {
                TimeUnit.MICROSECONDS.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
    }
    System.out.println(service);
    
    TimeUnit.SECONDS.sleep(60);
    
    System.out.println(service);
}
}

public class ForkJoinPool  {

static  int[] news = new int[1000000];
static final int MAX_NUM = 50000;
static Random random = new Random();

static {
    for(int i = 0; i < news.length; i++) {
        news[i] = random.nextInt(100);
    }
    System.out.println(Arrays.stream(news).sum());
}

static class addTask extends RecursiveAction { //通过RecursiveAction和RecursiveTask

    int start,end;

    addTask(int s,int e) {
        this.start = s;
        this.end = e;
    }

    @Override
    protected void compute() {
        if (end - start < MAX_NUM) {
            long sum = 0;
            for(int i = start;i <end; i++) sum += news[i];
            System.out.println("start:" + start + "to" + "end:" +end + "=" +sum);
        } else {
            int middle = start + ( end - start)/2;

            addTask task1 = new addTask(start,middle);
            addTask task2 = new addTask(middle,end);
            task1.fork();
            task2.fork();
        }
    }

}
}
 

猜你喜欢

转载自blog.csdn.net/ASD123456789656/article/details/89842527