java多线程

线程与进行

线程:程序中的顺序控制流,指单个任务

进程:执行中的程序,一个进程至少包含一个线程。比如任务管理器中那些程序在运行。

一个程序(一个进程)可以由多个线程实现。

线程的实现

  1. 线程的实现有两种:继承Thread类;实现Runable接口;

  2. Thread类:Thread类是Java.lang包中定义的,集成Thread类必须重写run()方法

                class className extends Thread{

                                            run(){};

                                            }

 //Form myThread.java
public class myThread extends Thread {

	private String name;

	public myThread(String name) {
		// TODO Auto-generated constructor stub

		this.name = name;

	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for (int i = 0; i < 1000; i++) {

			System.out.println(name + ":" + i);
		}

		super.run();

	}
}
// form threadDemo.java
public class ThreadDemo {
	public static void main(String[] args) {

		myThread t1 = new myThread("A");

		myThread t2 = new myThread("B");
		// 使用run()方法不能实现并发
		// t1.run();
		// t2.run();

		// 使用start()方法是以实现t1,t2并发
		t1.start();
		t2.start();

	}
}


3. Runable接口

myRunable.java

public class myRunable implements Runnable {
	private String name;
	public myRunable(String name) {
		// TODO Auto-generated constructor stub
		this.name = name;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for (int i = 0; i < 1000; i++) {
			System.out.println(name + ":" + i);
		}
	}
}

ThreadDemo.java

public class ThreadDemo {
	public static void main(String[] args) {

		myRunable r1 = new myRunable("A");
		myRunable r2 = new myRunable("B");
                //使用Thread实现start()方法!!!!!
		Thread t1 = new Thread(r1);
		Thread t2 = new Thread(r2);
		t1.start();
		t2.start();
	}
}


线程状态

线程也有固有的操作状态

创建状态:准备好了一个多线程的对象/ new Thread对象

就绪状态:调用start()方法,等待cpu进行调度;

运行状态:执行run()方法;

阻塞状态:暂时停止执行,可能将资源交给其他线程使用;

终止状态(死亡状态):线程销毁;

线程的常用方法

线程的方法基本都在Thread类中,通过Thread类调用

  1. 取得线程名字    getName()

  2. 取得当前线程对象    currentThread()

  3. 判断线程是否启动     isAlive()

  4. 线程的强行运行   join()   强行插队并将其执行完毕

  5. 线程的休眠    sleep()     Thread.sheep(1000); //sleep 1000ms后执行

  6. 线程的礼让   yield()   

线程的优先级

1-MIN_PRIORITY

10-MAX_PRIORITY

5-NORM_PRIORITY

t1.setPriority(Thread.MIN_PRIORITY);

通过这个调用。21

线程同步

同步与死锁

http://zhidao.baidu.com/link?url=3HGWwcJ_SzENgUgn7sWIftQuBNaP2uOyByrndP1Lw1k-fP7jVLu0_1wvgsRYQNW9bhuEn36n3pOx1SPyhind7YCUtW3KaWSkIQ2HuNyowF3

线程同步
线程同步是指当大家共用同一个东西的时候才有必要,使用资源一般只是在程序执行流程的某个环节,多数时间它们是在处理而不是操作资源,比如程序处理完数据后保存到磁盘就只是在保存时使用资源,而处理的时候不使用资源,我们同步仅对使用资源加锁,处理数据的部分是可以同时并行的,所以我们的桌面型操作系统允许多个任务同时运行,只是在访问磁盘时内部细节中加锁轮,当磁盘机械装置转到哪个扇区时就允许哪个程序来访问。

我们不能对所有的东西都用 synchronized,仅对有可能导致冲突和状态不一致的代码加 synchonized 来锁定这块区域,就是说进入这个块区域之前必须申请锁而且得到锁后运行时其它线程在它释放锁之前不能访问,如果其它线程当前还在处理数据并没有打算使用这个资源的时候就可以在另一个线程中并行运行。


你可能感兴趣的:(java多线程)