zoukankan      html  css  js  c++  java
  • 多线程总结

     1 package day23;
     2 
     3 /**
     4  * 
     5  * @author指针怒草内存栈 多线程第一种方式
     6  *
     7  */
     8 class Thread_01 extends Thread {
     9 
    10     // 继承Thread类
    11     // 重写run方法
    12     public void run() {
    13         for (int i = 1; i < 10; i++) {
    14             System.out.println("线程");
    15         }
    16 
    17     }
    18 
    19 }
    20 
    21 class Thread_01Test {
    22     public static void main(String[] args) {
    23         // 创建线程对象
    24         Thread_01 thread_01 = new Thread_01();
    25         // 开启线程
    26         thread_01.start();
    27     }
    28 }

    -------------------------------------------------------------------------------------------------------------------------------------------------------

     1 package day23;
     2 
     3 /**
     4  * 
     5  * @author 指针怒草内存栈 演示getName() setName() 设置和获取线程的名字
     6  *
     7  */
     8 class MyThread extends Thread {
     9     public void run() {
    10         for (int i = 0; i < 10; i++) {
    11             try {
    12                 Thread.sleep(1);//休眠一会
    13             } catch (InterruptedException e) {
    14             }
    15             System.out.println(this.getName() + " .. " + i);//获取线程名字
    16         }
    17     }
    18 }
    19 
    20 public class Thread_02 {
    21     public static void main(String[] args) {
    22         MyThread mt = new MyThread();
    23         mt.setName("苍老师");
    24         mt.start();
    25         MyThread mt1 = new MyThread();
    26         mt1.setName("小泽老师");
    27         mt1.start();
    28 
    29     }
    30 }

    -----------------------------------------------------------------------------------------------------------------------------------------------------

    线程的守护:

      线程守护

    --------------------------------------------------------------------------------------------------------------------------------------------------------

     1 package day23;
     2 
     3 /**
     4  * 2.3、线程控制 2.3.1、线程休眠 2.3.2、优先级 2.3.3、守护线程
     5  * 
     6  * @author 指针怒草内存栈
     7  *
     8  */
     9 public class SleepThread_01 {
    10     /**
    11      * sleep(long millis) 让线程休眠多少毫秒
    12      * 
    13      */
    14     public static void main(String[] args) {
    15         // new实现类对象(即任务类对象)
    16         ThreadSleep tsSleep = new ThreadSleep();
    17         // new 线程类对象
    18         Thread thread = new Thread(tsSleep, "柳岩岩");
    19         // 开启
    20         thread.start();
    21         // new实现类对象(即任务类对象)
    22         ThreadSleep tsSleep1 = new ThreadSleep();
    23         // new 线程类对象
    24         Thread thread1 = new Thread(tsSleep, "范爷爷");
    25         // 开启
    26         thread1.start();
    27     }
    28 
    29 }
    30 
    31 class ThreadSleep implements Runnable {
    32 
    33     public void run() {
    34         for (int i = 1; i < 10; i++) {
    35             try {
    36                 Thread.sleep(100);
    37                 System.out.println(Thread.currentThread().getName() + "线程休眠");
    38             } catch (InterruptedException e) {
    39                 // TODO Auto-generated catch block
    40                 e.printStackTrace();
    41             }
    42         }
    43     }
    44 
    45 }
    线程的休眠

    --------------------------------------------------------------------------------------------------------------------------------------------------------

     1 package day23;
     2 
     3 /**
     4  * 2.3、线程控制 2.3.1、线程休眠 2.3.2、优先级 2.3.3、守护线程 Thread.yield();线程的礼让
     5  * 
     6  * @author 指针怒草内存栈
     7  *
     8  */
     9 public class joinThread_2 {
    10     /**
    11      * sleep(long millis) 让线程休眠多少毫秒
    12      * 
    13      * @throws Exception
    14      * 
    15      */
    16     public static void main(String[] args) throws Exception {
    17         // new实现类对象(即任务类对象)
    18         ThreadSleep tsSleep = new ThreadSleep();
    19         Thread thread = new Thread(tsSleep, "柳岩岩-----thread");
    20         Thread thread2 = new Thread(tsSleep, "柳岩岩-####thread2");
    21         Thread thread1 = new Thread(tsSleep, "范爷爷%%%%%%thread1");
    22         // 开启
    23         // 开启
    24         thread.start();
    25         thread2.join();// 当这个线程加入时候,只有当这个线程全不运行结束才让其他线程运行
    26         thread1.start();
    27         thread2.start();
    28     }
    29 
    30 }
    31 
    32 class Threadjoin implements Runnable {
    33 
    34     public void run() {
    35         for (int i = 1; i < 10; i++) {
    36             try {
    37                 Thread.sleep(1);
    38                 System.out.println(Thread.currentThread().getName() + "线程休眠" + i);
    39             } catch (InterruptedException e) {
    40                 // TODO Auto-generated catch block
    41                 e.printStackTrace();
    42             }
    43         }
    44     }
    45 
    46 }
    线程的加入

    --------------------------------------------------------------------------------------------------------------------------------------------------------

    卖票
     1 package day23;
     2 
     3 /**
     4  * 
     5  * @author指针怒草内存栈 线程安全问题
     6  */
     7 public class SellTickets {
     8     public static void main(String[] args) {
     9         Tickes tickes = new Tickes();
    10         Thread t1 = new Thread(tickes, "窗口1");
    11         Thread t2 = new Thread(tickes, "窗口2");
    12         Thread t3 = new Thread(tickes, "窗口3");
    13         t1.start();
    14         t2.start();
    15         t3.start();
    16     }
    17 }
    18 
    19 class Tickes implements Runnable {
    20     private int tickets = 100;
    21 
    22     public void run() {
    23         for (int i = 1; i < tickets; i++) {
    24             System.out.println(Thread.currentThread().getName() + "------" + tickets);
    25             tickets--;
    26         }
    27     }
    28 
    29 }

     
     
     1 package day23;
     2 
     3 /**上面的那种方式或出现重复票!或者0票负数票!
     4  * 
     5  * @author指针怒草内存栈 线程安全问题 使用同步代码块来解决重复票问题
     6  */
     7 public class SellTickets2 {
     8     public static void main(String[] args) {
     9         Tickes2 tickes = new Tickes2();
    10         Thread t1 = new Thread(tickes, "窗口1");
    11         Thread t2 = new Thread(tickes, "窗口2");
    12         Thread t3 = new Thread(tickes, "窗口3");
    13         t1.start();
    14         t2.start();
    15         t3.start();
    16     }
    17 }
    18 
    19 class Tickes2 implements Runnable {
    20     private int tickets = 100;
    21     private Object obj = new Object();
    22 
    23     public void run() {
    24         while (true) {
    25             synchronized (obj) {//同步代码块
     1 package day23;
     2 
     3 /**
     4  * 关于单例模式下的线程安全问题
     5  * 
     6  * @author指针怒草内存栈
     7  * 
     8  *
     9  */
    10 public class Singleton {
    11     public static void main(String[] args) {
    12         SinSynchrozied.SinSynchr();
    13     }
    14 
    15 }
    16 
    17 class SinSynchrozied {
    18     /**
    19      * 懒汉式
    20      */
    21     private SinSynchrozied() {
    22     }
    23 
    24     private static SinSynchrozied sin = null;
    25 
    26     public static SinSynchrozied SinSynchr() {
    27         if (sin == null) {//这里是为了提高效率。直接再外面就判断一次,如果不是,就直接跳过,不同进来了
    28             // 同步
    29             synchronized ("abc") {
    30                 if (sin == null) {
    31                     sin = new SinSynchrozied();
    32                 }
    33             }
    34 
    35         }
    36         return sin;
    37 
    38     }
    39 
    40 }
    
    
    
    26                 if (tickets > 0) {
    27                     System.out.println(Thread.currentThread().getName() + "------" + tickets);
    28                     tickets--;
    29                 }
    30             }
    31 
    32         }
    33 
    34     }
    35 }
     1 package day23;
     2 
     3 /**
     4  * 死锁:其实就是不同的二把锁。交叉使用了。
     5  * 
     6  * 在同步代码中。二个人不断的拿和放。本来以为很和谐,但是当cpu随机切换时候,
     7  *  对方都持有对方的锁!导致谁也拿不到自己的锁!
     8  * 
     9  * 
    10  * @author 指针怒草内存栈
    11  *
    12  */
    13 public class DeadLock implements Runnable {
    14     // 定义二把锁
    15     private Object lock1 = new Object();
    16     private Object lock2 = new Object();
    17     // 定义一个条件
    18     private boolean flat = true;
    19 
    20     @Override
    21     public void run() {
    22         // TODO Auto-generated method stub
    23         if (flat == true) {
    24             while (true) {
    25                 synchronized (lock1) {
    26 
    27                     synchronized (lock2) {
    28 
    29                     }
    30                 }
    31             }
    32         } else {
    33             while (true) {
    34                 synchronized (lock2) {
    35 
    36                     synchronized (lock1) {
    37 
    38                     }
    39                 }
    40             }
    41         }
    42     }
    43 
    44 }
    梦想一定要有,万一实现了!
  • 相关阅读:
    利用jquery进行ajax提交表单和附带的数据
    jquery插件-validate
    function [eigf,eigv,dof]=laplaceeig(node,elem,problem)
    [A,D]=solverAdini(node,elem,bdEdge,h1,h2)
    Example11(June 9,2015)
    加州旅馆
    jpg/png格式图片转eps格式的方法--latex自带命令bmeps
    accumarray
    HDU 1423 最长公共字串+上升子序列
    HDU 1503 带回朔路径的最长公共子串
  • 原文地址:https://www.cnblogs.com/java-synchronized/p/5574812.html
Copyright © 2011-2022 走看看