Java学习笔记13

 
======================================================================
  JAVA第十三天
=====================================================================
上午的内容:
  Action的事件源
  JButton 按下激发 Action
  JTextField 敲回车会激发 Action
  JList 鼠标双击激发
  JMenuItem 选中菜单项激发    
====================================================================
下午: 多线程:
  每一个线程由3部分组成: CPU,代码,数据
  进程和线程本的区别: 对于进程,数据空间独占.线程的数据空间是共享的.堆空间是对象.堆是多线程共享的.
  在JAVA一个线程是一个对象.Thread
  一个线程对象代表了一个线程. 他不是线程.线程是操作系统维护的一种系统资源.
 
           
  线程的状态图: 初始状态--------->可运行状态---------->运行状态--------->结束状态
                       start                   
  只有处在运行状态他才有机会执行代码,在那等着. 操作系统选择在可运行状态的线程中挑选一个进入运行状态,当一个CPU时间片到期了,这在运行的线程,会回到可运行状态.当RUN方法退出而时候,他会进入终止状态. 当所有的线程都进入终止状态的时候,虚拟机进程才会结束.
  在运行状态会进入堵塞: 等待输入,不再堵塞了,会进入可运行状态从新排队.
  进入堵塞状态情况: 等待输入,Thread.sleep(100); Thread.join()静态方法会把调用他的线程堵塞.当加入的线程进入终止状态的时候,当前线程才会进入运行状态.
  Thread.yield() 静态方法 放弃CPU的使用权.
  Thread.setPriority(int i) 1---10,数字越大优先级越高.一般来说没什么用
(2) 关于 Runnable() 的例子
  package thread;
  public class TestTread {
    public static void main(String[] args) {
      Thread t=new Thread();//代表了一个线程,不是一个线程.而是一个对象,管理线程.
      t.start();//到底层的操作系统申请线程.
      Thread t1=new MyThread1();
      Thread t2=new MyThread2();
      Runnable r1=new MyThread3();
      Thread t3=new Thread(r1);
      t1.start();
      t2.start();
      t3.start();
    }
  }
  
  class MyThread1 extends Thread{
    public void run(){
      for(int i=0;i<20;i++){
        System.out.println(i+"  $$$$$$");
        try {
          Thread.sleep(100);
        } catch (InterruptedException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    }
  }
  
  class MyThread2 extends Thread{
    public void run(){
      for(int i=0;i<20;i++){
        System.out.println(i+"  ######");
        try {
          Thread.sleep(200);
        } catch (InterruptedException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    }
  }
  
  class MyThread3 implements Runnable{//是目标对象,通过目标对象构造一个线程对象.
    public void run(){
      for(int i=0;i<20;i++){
        System.out.println(i+"  @@@@");
        try {
          Thread.sleep(300);
        } catch (InterruptedException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    }
  }


(3) 关于Thread.join() 的例子
  package thread;
  public class TestThread {
    public static void main(String[] args) {
        Thread t1=new MyThread1();//代表了一个线程,不是一个线程.而是一个对象,管理线程.
        Thread t2=new MyThread2(t1);
        t1.start();//到底层的操作系统申请线程.
        t2.start();
    }
  }
  class MyThread1 extends Thread{
    public void run() {
      for(int i=1;i<=20;i++){
        System.out.println(i+"   $$$");
        try {
          Thread.sleep(100);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }
  }
  class MyThread2 extends Thread{
    Thread t;
    public MyThread2(Thread t) {
      this.t = t;
    }
  
    public void run(){
      for(int i=1;i<=20;i++){
        System.out.println(i+"   ###");
        try {
          Thread.sleep(100);
          if (i==10) t.join();
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }
  }

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炼丹狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值