Java之Thread学习(一)

线程的引入

        我们学习多线程,首先先学习什么是进程,线程依赖于进程存在

        什么是多进程?

                进程:系统可以进行独立调配并且是一个不可分割 独立单元

                              开启一个任务管理器,很多进程(应用软件/某些客户端)
             多进程的意义:是为了提高CPU的使用率
                         现在计算机都是多进程,假设:在听音乐的同时,也在打游戏..,他们是同时进行的吗?
                 他们不是同时进行的,感觉同时,一点点CPU的时间片在同一个时刻在两个进程之间进行高效的切换!
        什么是线程?
             线程:进程的一个独立的单元
             一个进程里面有多个任务,把每一个任务看成一个线程
         多线程:
             线程之间在抢占CPU的执行权(抢占资源)
              多线程的执行具有随机性

如何实现多线程程序呢?

     要实现多线程程序,需要开启进程,
     开启进程,是需要创建系统资源,但是Java语言不能创建系统资源

     只有C/C++可以创建系统资源, 利用c语言创建好的系统资源实现

     Java提供了一个类:Thread类
  实现 Thread 类的 run 方法
  1)将类声明为 Thread 的子类
  2)该子类应重写 Thread 类的 run 方法

3)在主线程进行该自定义的线程类的对象的创建

 并行和并发(高并发:MyBatis --->IBatis:半自动化)
         前者逻辑上的同时,指的是同一个时间段内

         后者物理上的同时,指的是同一个时间点


public class MyThread extends Thread {  
@Override  
public void run() {  
    for(int i=0;i<200;i++) {  
        System.out.println(i);  
    }  
}  
}  
public class TheadDemo {  
public static void main(String[] args) {  
    //创建被执行的类对象  
    MyThread m=new MyThread();  
    m.start();  
    MyThread n=new MyThread();  
    n.start();  
}  
}  

注意:不能直接调用run方法,必须使用start方法,使用时,不能用一个对象使用多个,多个对象可以同时分别调用来使用。


Thread 类提供了一些方法
  public final void setName(String name):给线程起名称
  public final String getName() :获取线程名称

                public final void join():等待该线程终止之后才进行线程抢占

                public static void yield()暂停当前正在执行的线程对象,并执行其他线程,有利于同时进行

                public final void setDaemon(boolean on) :true时,表示为守护线程
              将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。(守护线程不会立即结束掉,它会执行一段时间在结束掉)

               注意:该方法必须在启动线程前调用。

            跟线程优先级相关的方法:
      public final int getPriority()返回线程的优先级。 
      public final void setPriority(int newPriority)更改线程的优先级
              线程存在一个默认优先级
                                       public static final int MAX_PRIORITY         10  最大优先级
                                       public static final int MIN_PRIORITY           1  最小优先级

                                       public static final int NORM_PRIORITY        5  默认优先级

                    public static void sleep(long millis): 线程睡眠 指定是时间毫秒值       throws InterruptedException 


两个区别:

public final void stop() ;强迫线程停止执行。 不会执行了 (过时了),方法能使用的
public void interrupt()中断线程。 表示中断线程的一种状态 


        面试题         wait()和sleep()的区别?

                        wait(): wait()调用的,立即释放锁  (同步锁/Lock锁)

                   sleep():线程睡眠,调用不会释放锁


实现多线程程序的第二种方式:
  1)自定义一个类,实现Runnable接口
  2)实现接口中的run方法,对耗时的代码进行操作
  3)然后在主线程中创建该了对象,将该类对象做为一个资源类,创建Threadd类的对象,将刚才的资源类作为参数进行传递 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值