Java 高线程 (一)

  • 1. 线程 Vs 进程
线程 只是进程中一部分,或者说线程只是进程中的一段路径,注意对于单核CPU 在某个时间周期中只能够执行线程
如果想执行多线程 必须双核CPU。
Java语言中 通过Thread 包中start方法来开启线程,在主函数main()中程序遇到start()方法之后,会自动的开启一个线程,但是其主线程还是会不断地进行;对于访问静态变量过程中必须保证线程的安全


  • 2.线程调用三种方式 1.继承 2.实现接口 3.匿名内部接口run方法的重载
1).对于继承而言,Java过程一般多是单继承,如果开发程序已经继承某个类,那么无法在继承Thread类
只能够采用 接口方法实现 多继承,因此在实际过程采用 implement Runnable 此接口方法调用Thread 达到多线程的开发。

Runnable 接口方式采用 静态代理设计模式  Thread T1 ----T1表示一个代理者,如果想要开启线程的话 
必须要 对真实角色 Demo_00类的对象的引用  所以 Thread T1= new Thread( new Demo_00())
最后才能使用 start() 方法进行开启。

public class Demo_00  implements Runnable {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Thread T1=new Thread(new Demo_00());//这里 传递对象 对真实角色的引用
		T1.start();
		System.out.println("Main 线程");
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for (int i=0;i<5;i++)
			System.out.println(Thread.currentThread().getName()+": "+ i);
	}

}
对同一个类对象 使用三个线程 发现 最后这三个线程结果是各自运行;明显三个线程引用同一个对象
最后造成线程的不安全----多个线程访问同一份资源
package ThreadDemo;

public class Demo_00  implements Runnable {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Demo_00 D=new Demo_00();
		
		Thread T1=new Thread(D,"路人甲");
		Thread T2=new Thread(D,"路人亿");
		Thread T3=new Thread(D,"路人丙");
		T1.start();T2.start();T3.start();
		System.out.println("Main 线程");
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for (int i=0;i<5;i++)
			System.out.println(Thread.currentThread().getName()+": "+ i);
	}

}
结果显示

路人丙: 0
路人丙: 1
路人丙: 2
路人丙: 3
路人丙: 4
路人甲: 0
路人亿: 0
路人甲: 1
路人亿: 1
路人甲: 2
路人甲: 3
路人甲: 4
路人亿: 2
路人亿: 3
路人亿: 4



2).采用匿名类方法进行重载
public class Demo_01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//使用对run方法重载
		new Thread()
		{
			public void run()
			{
				for (int i=0;i<5;i++)
					System.out.println(Thread.currentThread().getName()+": "+ i);
			}
		}.start();
		System.out.println("Main 线程");
	}

}

3). Callable 中Call方法重写 可以抛出异常和有返回值。
1).必须要用到线程调度类  ExecurtorService ser=Executor.newFixedThreadPool(1);
2) Future result=ser.submit(实现对象)
3). ser.shutdownNow();

对于线程 sleep()方法同样也是Thread.sleep();
package ThreadDemo;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class Call {

	public static void main(String[] args) throws InterruptedException, ExecutionException {
		// TODO Auto-generated method stub
		ExecutorService ser =Executors.newFixedThreadPool(1);
		
		Future<Integer>result=ser.submit(new Race());
		
		int num= result.get();//get()方法得到Callable中 call方法的值
		
		System.out.println(num);
		ser.shutdownNow();
	}

}

class  Race implements Callable<Integer>{

	@Override
	public Integer call() throws Exception {
		// TODO Auto-generated method stub
		int i=0;
		for( i=0;i<100;i++);
		
		return i;
	}
	
}

  • 3.线程状态图:阻塞状态之后是就绪状态

线程的停止:
 1).采用外部干涉  s.stop()---不常用
  2). 阻塞:线程在此过程不断在等待
join() 方法 :比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。
yiled()静态方法 Thread.yield();
Thread.sleep():不会放弃锁 运用在 倒计时或者是在模拟网络延时的状态。
package ThreadDemo;

public class Test_01 implements Runnable{

	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
		Thread t1=new Thread(new Test_01());
		t1.start();
		//使用join方法
		for (int i=0;i<100;i++)
		
		{
			
				t1.join(100);//,明显主线程被阻塞
			System.out.println("main---" +i);
			
		}
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for (int i=0;i<100;i++)
			System.out.println(Thread.currentThread().getName()+": "+ i);
	}

}

Thread-0: 0
Thread-0: 1
Thread-0: 2
Thread-0: 3
Thread-0: 4
Thread-0: 5
Thread-0: 6
Thread-0: 7
Thread-0: 8
Thread-0: 9
Thread-0: 10
Thread-0: 11
Thread-0: 12
Thread-0: 13
Thread-0: 14
Thread-0: 15
Thread-0: 16
Thread-0: 17
Thread-0: 18
Thread-0: 19
Thread-0: 20
Thread-0: 21
Thread-0: 22
Thread-0: 23
Thread-0: 24
Thread-0: 25
Thread-0: 26
Thread-0: 27
Thread-0: 28
Thread-0: 29
Thread-0: 30
Thread-0: 31
Thread-0: 32
Thread-0: 33
Thread-0: 34
Thread-0: 35
Thread-0: 36
Thread-0: 37
Thread-0: 38
Thread-0: 39
Thread-0: 40
Thread-0: 41
Thread-0: 42
Thread-0: 43
Thread-0: 44
Thread-0: 45
Thread-0: 46
Thread-0: 47
Thread-0: 48
Thread-0: 49
Thread-0: 50
Thread-0: 51
Thread-0: 52
Thread-0: 53
Thread-0: 54
Thread-0: 55
Thread-0: 56
Thread-0: 57
Thread-0: 58
Thread-0: 59
Thread-0: 60
Thread-0: 61
Thread-0: 62
Thread-0: 63
Thread-0: 64
Thread-0: 65
Thread-0: 66
Thread-0: 67
Thread-0: 68
Thread-0: 69
Thread-0: 70
Thread-0: 71
Thread-0: 72
Thread-0: 73
Thread-0: 74
Thread-0: 75
Thread-0: 76
Thread-0: 77
Thread-0: 78
Thread-0: 79
Thread-0: 80
Thread-0: 81
Thread-0: 82
Thread-0: 83
Thread-0: 84
Thread-0: 85
Thread-0: 86
Thread-0: 87
Thread-0: 88
Thread-0: 89
Thread-0: 90
Thread-0: 91
Thread-0: 92
Thread-0: 93
Thread-0: 94
Thread-0: 95
Thread-0: 96
Thread-0: 97
Thread-0: 98
Thread-0: 99
main---0
main---1
main---2
main---3
main---4
main---5
main---6
main---7
main---8
main---9
main---10
main---11
main---12
main---13
main---14
main---15
main---16
main---17
main---18
main---19
main---20
main---21
main---22
main---23
main---24
main---25
main---26
main---27
main---28
main---29
main---30
main---31
main---32
main---33
main---34
main---35
main---36
main---37
main---38
main---39
main---40
main---41
main---42
main---43
main---44
main---45
main---46
main---47
main---48
main---49
main---50
main---51
main---52
main---53
main---54
main---55
main---56
main---57
main---58
main---59
main---60
main---61
main---62
main---63
main---64
main---65
main---66
main---67
main---68
main---69
main---70
main---71
main---72
main---73
main---74
main---75
main---76
main---77
main---78
main---79
main---80
main---81
main---82
main---83
main---84
main---85
main---86
main---87
main---88
main---89
main---90
main---91
main---92
main---93
main---94
main---95
main---96
main---97
main---98
main---99


yiled()方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值