提及线程 就不得不提进程 他们之间的关系很紧密 java
进程:内存中运行的应用程序 每一个进程都有本身的一块内存空间 而线程是进程中的一个执行单元 一个进程中能够有多个线程 多线程的好处就是能够并发操做程序 将cpu资源利用率最大化 就像咱们生活中同样 当咱们在一个视屏网站下电影的时候 咱们能够去作一些其余的时间 不须要一直等着电影下完再去作不会耗费多余的时间 这就是多线程的好处安全
如何实现多线程呢多线程
1.继承Thread类 而后重写run方法并发
2.实现Runnable接口实现重写·ide
|
特色
|
继承thread类
|
只适用于单继承 编写简单 能够直接操做
|
实现runnable接口
|
能够实现多继承
|
线程的状态测试
1.新建状态网站
线程在被建立后就进入了新建状态 例如Thread thread=newThread();this
2.就绪状态(也称为可执行转态)spa
1 package com.newroad.thread.test; 2 //帐户类
3 public class Account { 4 private double balance; 5 private Object lock=new Object(); 6 public Account(double balance) { 7 super(); 8 this.balance = balance; 9 } 10 public void withdrawMoney(double money) { 11 String name=Thread.currentThread().getName(); 12 System.out.println(name+"取款前帐户余额为:"+balance); 13 if (balance>=money) { 14 balance=balance-money; 15 System.out.println(name+"取款金额为:"+money +"取款后,余额为:"+balance); 16 }else { 17 System.out.println(name+"余额不足,帐户余额为:"+balance+"取款金额为;"+money); 18 } 19
20 } 21
3
34
35 } 36
37 //线程类
38 package com.newroad.thread.test;
40 public class PersonThread extends Thread { 41 private Account account; 42 private double drawbalance; 43 public PersonThread(Account account, double drawbalance) { 44 super(); 45 this.account = account; 46 this.drawbalance = drawbalance; 47 } 48
49 @Override 50 public void run() { 51 account.withdrawMoney(drawbalance); 52
53 } 54
55 } 56
57
58 //这是测试类
59 package com.newroad.thread.test; 60
61 public class Test { 62 public static void main(String[] args) { 63 Account account=new Account(4000); 64 PersonThread p=new PersonThread(account, 2400); 65 PersonThread p1=new PersonThread(account, 1000); 66 PersonThread p2=new PersonThread(account, 600); 67 p.setName("张三"); 68 p1.setName("张三媳妇"); 69 p2.setName("张三爸"); 70 p.start(); 71 p1.start(); 72 p2.start(); 73 } 74 }
1 package com.newroad.thread.test; 2 3 public class Account { 4 private double balance; 5 private Object lock = new Object(); 6 7 public Account(double balance) { 8 super(); 9 this.balance = balance; 10 } 11 public void withdrawMoney(double money) { 12 String name = Thread.currentThread().getName(); 13 synchronized (this) { 14 System.out.println(name + "取款前帐户余额为:" + balance); 15 if (this.balance >= money) { 16 balance = balance - money; 17 System.out.println(name + "取款金额为:" + money + "取款后,余额为:" + balance); 18 } else { 19 System.out.println(name + "余额不足,帐户余额为:" + balance + "取款金额为;" + money); 20 } 21 } 22 } 23 24 }
这时咱们就能够发现就没问题了线程