Java线程
来源:互联网 发布:淘宝无法收藏宝贝 编辑:程序博客网 时间:2024/05/22 23:07
一,区分进程与线程
1,进程
每一个应用程序就是一个进程
2,线程
每个进程包含多个线程用来实现不同任务
二,建立线程的方式(两种)
1,通过继承Thread类 创建一个thread的子类 xxxthread
通过直接 new xxxthread() 的方式 创建线程对象
如:public class MyThread extends Thread{
@Override
public void run(){
super.run();
try{
Thread.sleep(2000);
}catch (InterruptedException e){
e.printStackTrace();
}finally{
}System.out.println(“我是一个线程”);
}
}
main中:
public static void main(String[] args) throws InterruptedException{
MyThread myThread = new MyThread();
myThread.start();
}
2,通过实现Runable 接口的方式
如: public class MyRunable implements Runable{
@Override
public void run(){
super.run();
try{
Thread.sleep(2000);
}catch (InterruptedException e){
e.printStackTrace();
}finally{
}System.out.println(“我是正在执行的myrunable:” + i);
}
}
main:
MyRunnable myRunnable = new MyRunnable;
Thread t = new Thread(myRunnable);
t.start;
三,另一种方式
1,private static void show3() {
new Thread(new Runnable() {
@Override
public void run() {
while (true){
System.out.println(“我是第一个线程”);
}
}
}).start();
2,new Thread(){
@Override
public void run() {
super.run();
while (true){
System.out.println(“—–”);
}
}
}.start();
}
线程的运行方式为抢占式运行
四,public class Another extends Thread{
@override
public void run(){
super.run();
for(int i =0;i <1000;i ++){
} System.out.println(“我是另一个线程:” +getState());
}
}
public class LifeThread extends Thread{
private Another another;
public LifeThread(Another another){
this.another=another;
}
@Override
public void run(){
super.run();
for(int i = 0;i<1000;i++){
System.out.println(“life—”+getState()+”—”+another.getState()
);}
}
}
private static void show(){
Another a = new Another();
LifeThread l = new LifeThread(a);
a.star();
l.star();
System.out.println(“主线程跑完了”);
}
五 死锁
public class PrinterDeadLock {
private String s1 =”我是s1”;
private String s2 =”我是s2”;
public void p1() {
synchronized (s1) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(“s1锁住了p1”);
synchronized (s2) { for (int i = 0; i < 20; i++) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("s2锁住了p1"); } } }}public void p2() { synchronized (s2) { System.out.println("s2锁住了p2"); synchronized (s1) { for (int i = 0; i < 20; i++) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("s1锁住了p2"); } } }}
}
六 锁 synchronized
public class SynDemo{
private static Integer count=10000;
public synchronized void del (){
for(int i= 0; i<2500;i++){
count-=1;
System.out.println(Thread.currentThread.getName()+”—–”+count);
}}
}
/锁是什么
//锁是一个对像
//假如A线程先访问这个del方法,
//那么锁对象就会被A线程持有
//那么其他线程想访问这个del方法的时候就会发现锁对象被A拿走了
//不能进入到del方法中
//当A执行完毕del方法的时候 会将锁释放出来
//这时候B C D 再争夺执行权
//谁抢到了 谁来执行
//再和A一样
- Java线程:什么是线程
- Java线程:线程池
- java线程--线程退出
- JAVA-线程/线程锁
- Java线程:什么是线程
- Java线程:线程中断
- Java线程:线程状态
- Java线程: 线程调度
- Java线程:线程交互
- java--线程--线程池
- java 线程
- Java线程
- java线程
- java线程
- Java线程
- Java线程
- java线程
- JAVA 线程
- C#简单窗体应用程序(三)
- 基于Unity3D的2d拾宝游戏(四)
- Java线程:volatile关键字
- PostgreSQL默认用户名与密码
- Dubbo实战(三)多注册中心配置
- Java线程
- 简单实现自定义View随手指拖动
- vs开发,添加try catch(...)发现没有捕获异常,需要对编译命令进行设置
- “师创杯”SDUT-ACM校赛正式赛-从零开始的异世界生活
- C++11使用make_shared的优势和劣势
- The Tag Game
- jsp(服务器目录结构)
- 6.6提纲
- 动态网页开发基础