继续看一下java的线程方面的问题
java支持多线程的语言,开启线程的两种方式:
- 继承Thread这个类的方式(java只能单继承)
- 用runable接口
下面是2个实例:
package com.jiang.thread;
public class ThreadStart extends Thread{
//线程与进程
//继承thread类,但是java里面都是单继承
public void run(){
for(int i =0;i<6;i++){
System.out.println(i);
}
}
public static void main(String[] args) {
ThreadStart a = new ThreadStart();
a.run();
}
}
package com.jiang.thread;
public class ThreadRunable implements Runnable {
@Override
public void run() {
for(int i = 0 ;i<1000;i++){
System.out.println("线程启动"+i+Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ThreadRunable a = new ThreadRunable();
ThreadRunable a1 = new ThreadRunable();
ThreadRunable a2 = new ThreadRunable();
Thread th = new Thread(a);
Thread th1 = new Thread(a1);
Thread th2 = new Thread(a2);
th.start();
th1.start();
th2.start();
}
}
如何让2个线程或多个线程去操作一个变量呢?
看下面的代码
package com.jiang.thread;
import java.util.Random;
public class ThreadShareDemo {
private static int data = 0;
public static void main(String[] args) {
//new Thread()
for(int i = 0;i<3;i++){
new Thread(){
public void run(){
Random num = new Random();
data = num.nextInt(1000);
System.out.println(Thread.currentThread().getName()+"data的数值为"+data);
new A().get();
new B().get();
}
}.start();
}
}
static class A {
public void get(){
System.out.println("这个是A"+Thread.currentThread().getName()+",data的数据"+data);
}
}
static class B{
public void get(){
System.out.println("这个是B"+Thread.currentThread().getName()+",data的数据"+data);
}
}
}
如何将他们存储起来对应上呢?用map将不同的data和thread对应起来
package com.jiang.thread;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class ThreadShareDemo {
private static int data = 0;
private static Map<Thread,Integer> map = new HashMap<Thread, Integer>();
public static void main(String[] args) {
//new Thread()
for(int i = 0;i<2;i++){
new Thread(){
public void run(){
Random num = new Random();
data = num.nextInt(1000);
map.put(Thread.currentThread(), data);
System.out.println(Thread.currentThread().getName()+"放入的data的数值为"+data);
new A().get();
new B().get();
}
}.start();
}
}
static class A {
public void get(){
System.out.println("这个是A"+Thread.currentThread().getName()+",data的数据"+map.get(Thread.currentThread()));
}
}
static class B{
public void get(){
System.out.println("这个是B"+Thread.currentThread().getName()+",data的数据"+map.get(Thread.currentThread()));
}
}
}