您的位置:首页 > 编程语言 > Java开发

java基础12多线程

2016-02-11 23:05 225 查看
/*

 * 如何在我们自定义的程序中去创建一个线程(执行路径,控制单元)呢?

 * 如何让自定义的线程运行我们执行的代码,可以和主线程同时执行呢?

 * 

 * 如何创建一个线程呢?

 * 其实java中对线程这类事物已经进行了描述,并提供了相应的对象,

 * 这个对象就是Thread

 * 

 * 通过API查询,发现Thread类描述时,有两种创建线程的方式

 * 方式1;定义一个类,继承Thread类,并复写Thread类中的run方法。

 * 

 * 主线程运行的代码都在main函数中

 * 自定义线程运行都在run方法中。

 * 

 * 直接创建Thread类的子类就是创建一个线程,

 *在内存中其实:1,堆内存中产生了一个对象,2,需要调用了底层资源,去创建执行路径

 *

 *如果直接调用该对象的run方法,

 *   这时,底层资源并没有完成线程的创建和执行 

 *    仅仅是简单的对象调用方法的过程,所以这时,执行控制流程的只有主线程,

 *

 *如果想要开启线程,需要去调用Thread类中另一个方法完成

 *start方法完成,该方法做了两件事,1,开启线程,2,调用了线程的run方法

 *

 *线程是随机型的,

 *随机性的原理是:windows中的多任务同时执行,其实就是多个应用程序在同时执行,

 *

 *线程中的几个方法,

 *多线程的创建,为了对各个线程进行标示,它们有一个自己默认的名称。

 *格式:Thread-编号,编号从零开始,

 *

 *如何获取主线程对象呢?通过currentThread()返回当前线程对象,该方法是静态的,

 *

 *static Thread currentThread():获取当前线程对象,

 *String getName():获取线程名称;

 *void setName:设置线程的名称

 *Thread(String name):构造函数,线程对象一建立就可以指定名称,

 *

 *创建线程方式2:实现runnable方法:

 *

 *创建线程的两种方式:

 *   1,继承Thread类

 *      步骤:

 *        1,定义类继承Thread

 *        2.覆盖Thread类中的run方法

 *        3.创建Thread类的子类对象创建线程

 *        4,调用Thread类中的start方法开启线程,并执行子类中的run方法。

 *        

 *        特点:

 *          1.当类去描述事物,事物中有属性和行为

 *            如果行为中有部分代码需要被多线程所执行,同时还在操作属性,

 *            就需要继承Thread类,产生该类的对象作为线程的对象

 *            可是这样做会导致每一个对象中都存储一份属性数据

 *            无法在多个线程中共享数据

 *          2,如果一个类明确了自己的父类,他就不能在继承Thread

 *

 *  实现runnable,避免了单继承的局限性。

 *  

 *  

 *  线程安全问题:因为多条操作功能数据的代码被多个线程分开执行造成的。

 *  安全问题涉及的内容

 *  1,共享数据

 *  2,是否被多条语句操作,

 *  

 *  解决安全问题的方式,

 *      java提供了一个同步机制,

 *      解决原理:让多条
4000
操作共享数据的代码在某一时间段,被一个线程执行完,在执行过程中,其他线程不可以参与运算,

 *        同步格式;

 *           同步代码块:

 *             synchronized(对象)//该对象可以是任意对象,

 *             {

 *             需要被同步的代码

 *             }

 */

class TicketWin implements Runnable{

   private int tickets=100;
public void run() {
// TODO Auto-generated method stub
while(true){
if(tickets>0){
System.out.println(tickets--);
}
}
}

}

 class ThreadDemo extends Thread{

    private String name;

    ThreadDemo(String name){

    this.name=name;

    }

    public  void run(){

    for(int x=0;x<100;x++){

    for(int y=0;y<99999;y++){}//为了减缓程序的执行

       System.out.println("name="+name);

    }

   

    }

}

           

 class MainThread{
public static void main(String[] args){
/* ThreadDemo d1=new ThreadDemo("one");//创建一个Thread类的子类对象,其实就是在创建一个线程,
ThreadDemo d2=new ThreadDemo("two");
*/
//创建线程对象,要么是Thread类的对象,要么是Thread类的子类对象,
TicketWin t=new TicketWin();
 
Thread t1=new Thread(t);
Thread t2=new Thread(t);
Thread t3=new Thread(t);
Thread t4=new Thread(t);
   /*d1.start();
   d2.start();*/
   
   
}

 }

 

 

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: