码迷,mamicode.com
首页 > 编程语言 > 详细

java高薪之路__006_多线程

时间:2015-10-04 12:25:18      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

线程的创建有两种方式

技术分享
 1 package learn.JavaBasics.Class;
 2 
 3 public class ThreadDemo extends Thread {
 4     private static int count = 1;
 5     
 6     public void run() {
 7         System.out.println("Thread: "+count+" has started");
 8         ++count;
 9     }
10 
11     /**
12      * @param args
13      */
14     public static void main(String[] args) {
15         // TODO Auto-generated method stub
16         ThreadDemo t1 = new ThreadDemo();
17         ThreadDemo t2 = new ThreadDemo();
18         ThreadDemo t3 = new ThreadDemo();
19                 
20         new Thread(new Runnable() {
21 
22             @Override
23             public void run() {
24                 // TODO Auto-generated method stub
25                 System.out.println("Runnable Thread has started");
26             }
27             
28         }).start();
29         
30         t1.start();
31         t2.start();
32         t3.start();
33     }
34 }
View Code

 

线程同步

由于一个线程在操作共享数据时,在未执行完毕的情况下,另外的线程也参与进来,导致共享数据存在了安全问题
解决方式:
1. 同步代码块
    synchronized(同步监视器) {
      //操作共享数据的代码
    }
    同步监视器, 由任何一个类的对象来充当,哪个线程获得了监视器,哪个线程才可操作共享数据,俗称:锁
    所有线程必须同用一个同步监视器, 即这个类的对象只能有一个(接口的形式使用this大体无碍,继承的方式可能会存在多个对象,慎用this)
2. 同步方法
    可以相似的理解为此时的同步监视器是这个函数

 

线程通信

技术分享
 1 package learn.JavaBasics.Class;
 2 
 3 class PrintNum implements Runnable{
 4     private int num = 1;
 5     
 6     @Override
 7     public void run() {
 8         // TODO Auto-generated method stub
 9         while(num <= 100) {
10             synchronized (this) {
11                 notify(); //唤醒一个顶部的wait的线程
12                 try {
13                     Thread.currentThread().sleep(10);
14                 } catch (InterruptedException e) {
15                     // TODO Auto-generated catch block
16                     e.printStackTrace();
17                 }
18                 System.out.println(Thread.currentThread().getName() + ":" + num);
19                 ++num;
20                 
21                 try {
22                     wait();//把本线程wait掉
23                 } catch (InterruptedException e) {
24                     // TODO Auto-generated catch block
25                     e.printStackTrace();
26                 }
27             }
28         }
29     }    
30 }
31 
32 public class TestCommunication {
33     /**
34      * 交替打印1到100的数值 
35      */
36     public static void main(String[] args) {
37         // TODO Auto-generated method stub
38         PrintNum p = new PrintNum();
39         
40         Thread t1 = new Thread(p);
41         Thread t2 = new Thread(p);
42         
43         t1.setName("A");
44         t2.setName("B");
45         
46         t1.start();
47         t2.start();
48     }
49 }
View Code

 

java高薪之路__006_多线程

标签:

原文地址:http://www.cnblogs.com/hangtt/p/4854409.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!