多线程

一、进程与线程:

  1. 进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;而程序不能申请系统资源,不能被系统调度,也不能作为独立运行的单位,因此,它不占用系统的运行资源。
  2. 线程:是进程中的一个单一的连续控制流程。一个进程可以拥有多个线程。
二、Java在语言级提供了对多线程程序设计的支持。实现多线程程序的两种方式:
  1. 从Thread类继承:
  • class MyThread extends Thread

-----继承Thread的类必须重写Thread中的run()方法,并且在创建MyThread实例对象时,如果要启动线程采用start()方法,此方法调用run()

  • yield()方法
-----当前线程休眠一段时间,让其它线程运行
  • setPriority() 
-----设置当前线程的优先级(从0到10)(从MIN_PRIORITY到MAX_PRIORITY),默认为5(NORM_PRIORITY)

注:后台线程,如果一个进程中没有非后台线程在运行,则JVM将要退出。将线程标识为后台线程:setDaemon(true),此方法要在线程start()之前调用

  1. 实现Runnable接口:
  • class MyThread implements Runnable
-----实现Runnable接口的类必须重写Runnable中的run()方法
  • MyThread mt = new MyThread(); 
-----实例化对象,但由于Runnable中没有start()方法,所以不能直接用start()方法
  • new Thread(mt).start();
-----用实例mt构造一个线程对象,调用start()

三、实现多线程程序的有以上两种方式,特点如下:

  1. 继承Thread,Thread中有许多方法可以调用
  2. 接口Runnable中只有一个run()方法,如果自定义线程类已经继承另一个类而无法继承Thread类,则可以实现Runnable接口
  3. 实现接口Runnable可以让多个线程共享同一个变量,如:

  • class MyThread extends Thread{
  • int index = 0;
  • public void run(){
  • while(true){
  • System.out.println(Thread.currentThread().getName()+":"+index++);}}}
  • MyThread mt = new MyThread(); 
  • new Thread(mt).start();
  • new Thread(mt).start();
  • new Thread(mt).start();
-----这几个线程对象引用同一个index变量


也可以用内部类来实现

  • class MyThread extends Thread{
  • int index = 0;
  • private class InnerThread extends Thread{
  • public void run(){
  • while(true){
  • System.out.println(Thread.currentThread().getName()+":"+index++);}}}
  • Thread getThread(){
  • return new InnerThread();}}
  • MyThread mt = new MyThread(); 
  • mt.getThread().start();
  • mt.getThread().start();
  • mt.getThread().start();

-----这几个线程对象引用同一个index变量

四、用多线程实现火车票售票系统

  • class TicketsSystem{
  • public static void main(String[] args){
  • SellThread st = new SellThread();
  • new Thread(st).start();
  • new Thread(st).start();
  • new Thread(st).start();
  • new Thread(st).start();}}


  • class SellThread implements Runnable{
  • int tickets = 100;
  • public void run(){
  • while(true){
  • try{
  • Thread.sleep(10);//线程睡眠10毫秒
  • }catch(Exception ex){
  • ex.printStackTrace();}
  • if(tickets>0){
  • System.out.println(Thread.currentThread().getName()+"sell tickets:"+tickets);
  • tickets--;}}}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值