Java基础回顾(三)

来源:互联网 发布:淘宝家装频道 编辑:程序博客网 时间:2024/05/16 05:43
---------------------- android培训、java培训、期待与您交流! ----------------------

一:多线程 
 (1)概述:在一个线程中有多条执行路径
  进程: 正在执行的程序,它代表着应用程序的执行区域.
  线程: 进程的执行路径.

 (2)创建线程的两种方式
  1:继承Thread类,实现run方法
   举例:
   class MyThread extends Thread
    {

     public void run()
     {
      for(int i=0; i<10; i++)
      {
       System.out.println(getName()+"***"+i);
      }
     }
    }

   class ThreadDemo2
    {
     public static void main(String[] args)
     {
      MyThread my1 = new MyThread();
      MyThread my2 = new MyThread();

       my1.start();//调用Thread方法启动线程
       my2.start();

       for(int i=0; i<10; i++)
      {
       System.out.println(Thread.currentThread().getName()+"***"+i);
      }
     }
    }

  2:实现Runable接口,然后实现run方法
   class MyThread implements Runnable
   {
    public void run()
    {
     for(int i=0; i<10; i++)
     {
      //getName()这个是Thread类的.所以在这个类中就不能通过getName()获取线程的名字
      //System.out.println(getName()+"***"+i);
   
      //Thread.currentThread()获取当前线程对象的引用
      System.out.println(Thread.currentThread().getName()+"***"+i);
     }
    }
   }

   class ThreadDemo5
   {
    public static void main(String[] args)
    {
 
     MyThread my = new MyThread();

     Thread t1 = new Thread(my);//是用Thread的构造方法启动线程,可以给这个线程传个名字.
     Thread t2 = new Thread(my);

     t1.start();
     t2.start();
    }
   }

 


二:同步代码块与同步函数
 由于多线程抢占CPU执行权,造成了线程的随机性,所以多线程是不安全的,这里就需要同步代码块与同步函数来解决了.
  
  同步代码块举例:
  class Ticket implements Runnable
   {
    private int tickets = 100;

    Object obj = new Object();
    Demo d = new Demo();//这里d对象是任意的,主要是创建一个锁给同步代码块使用.

    public void run()
    {
     while(true)
     {
   
      //t1,t2,t3,t4 同时进来看哪个线程抢到锁,抢到了锁.别的线程就进不去了.解决了安全问题
      synchronized(d) //将产生不安全的代码使用同步代码块.
      {
       if(tickets>0)
       {
        try
        {
         //睡眠100毫秒
         Thread.sleep(100);
        }
        catch (InterruptedException e)
        {
        }
     
        System.out.println(Thread.currentThread().getName()+"***"+(tickets--));
       }
      }
     }
    }
   }

   class Demo
   {
   }


   class ThreadDemo8
   {
    public static void main(String[] args)
    {
     Ticket t = new Ticket();

     Thread t1 = new Thread(t,"窗口1");
     Thread t2 = new Thread(t,"窗口2");
     Thread t3 = new Thread(t,"窗口3");
     Thread t4 = new Thread(t,"窗口4");

     t1.start();
     t2.start();
     t3.start();
     t4.start();
    }
   }


  同步函数举例:
class Ticket implements Runnable
{
 private int tickets = 100;

 Object obj = new Object();

 public void run()
 {
  while(true)
  {
   show();
  }
 }

 public synchronized void show()
 {
  if(tickets>0)
  {
   try
   {
    //睡眠100毫秒
    Thread.sleep(100);
   }
   catch (InterruptedException e)
   {
   }
   
   System.out.println(Thread.currentThread().getName()+"***"+(tickets--));
  }
 }
}

class FunctionDemo
{
 public static void main(String[] args)
 {
  Ticket t = new Ticket();

  Thread t1 = new Thread(t,"窗口1");
  Thread t2 = new Thread(t,"窗口2");
  Thread t3 = new Thread(t,"窗口3");
  Thread t4 = new Thread(t,"窗口4");

  t1.start();
  t2.start();
  t3.start();
  t4.start();
 }
}

 

---------------------- android培训、java培训、期待与您交流! ----------------------
原创粉丝点击