java基础12多线程

/*
 * 如何在我们自定义的程序中去创建一个线程(执行路径,控制单元)呢?
 * 如何让自定义的线程运行我们执行的代码,可以和主线程同时执行呢?
 * 
 * 如何创建一个线程呢?
 * 其实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提供了一个同步机制,
 *      解决原理:让多条操作共享数据的代码在某一时间段,被一个线程执行完,在执行过程中,其他线程不可以参与运算,
 *        同步格式;
 *           同步代码块:
 *             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();*/
   
   
}
 }
 
 
 
 
 
 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值