java线程并发代码 java多线程并发编程

java线程的经典代码

package threadgroup;

我们拥有十多年网页设计和网站建设经验,从网站策划到网站制作,我们的网页设计师为您提供的解决方案。为企业提供成都网站设计、成都网站建设、微信开发、微信小程序、手机网站制作成都h5网站建设、等业务。无论您有什么样的网站设计或者设计方案要求,我们都将富于创造性的提供专业设计服务并满足您的需求。

class ThreadDemo3 extends Thread {

private String name;

private int delay;

public ThreadDemo3(String sname, int i_delay) {

name = sname;

delay = i_delay;

}

public void run() {

try {

sleep(delay);

} catch (InterruptedException e) {

}

System.out.println("多线程测试!\n" + name + "\n" + delay);

}

}

public class testMyThread {

public static void main(String[] args) {

ThreadDemo3 th1,th2,th3;

th1 = new ThreadDemo3("线程1", (int) (Math.random() * 900));

th2 = new ThreadDemo3("线程2", (int) (Math.random() * 900));

th3 = new ThreadDemo3("线程3", (int) (Math.random() * 900));

th1.start();

th2.start();

th3.start();

}

}

package threadgroup;

public class threadDemo {

public static void main(String[] args) {

Thread t = Thread.currentThread();

t.setName("你好吗?");

System.out.println("正在进行的Thread是:" + t);

try {

for (int i = 0; i 5; i++) {

System.out.println("我不叫穆继超" + i);

Thread.sleep(3000);

}

} catch (Exception e) {

// TODO: handle exception

System.out.println("Thread has wrong" + e.getMessage());

}

}

}

package threadgroup;

public class threadDemo2 implements Runnable {

public threadDemo2() {

Thread t1 = Thread.currentThread();

t1.setName("第一个主进程");

System.out.println("正在运行" + t1);

Thread t2 = new Thread(this, "");

System.out.println("在创建一个进程");

t2.start();

try {

System.out.println("使他进入第一个睡眠状态");

Thread.sleep(2000);

} catch (InterruptedException e) {

System.out.println("Thread has wrong" + e.getMessage());

}

System.out.println("退出第一个进程");

}

public void run() {

try {

for (int i = 0; i 5; i++) {

System.out.println("进程" + i);

Thread.sleep(3000);

}

} catch (InterruptedException e) {

// TODO: handle exception

System.out.println("Thread has wrong" + e.getMessage());

}

System.out.println("退出第二个进程");

}

public static void main(String[] args) {

new threadDemo2();

}

}

java实现两个线程,一个打印奇数,一个打印偶数,这两个线程如何并发执行?

package test;

public class Test33{

private static int state = 1;

private static int num1 = 1;

private static int num2 = 2;

public static void main(String[] args) {

final Test33 t = new Test33();

new Thread(new Runnable() {

@Override

public void run() {

while(num1100){

//两个线程都用t对象作为锁,保证每个交替期间只有一个线程在打印

synchronized (t) {

// 如果state!=1, 说明此时尚未轮到线程1打印, 线程1将调用t的wait()方法, 直到下次被唤醒

if(state!=1){

try {

t.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

// 当state=1时, 轮到线程1打印5次数字

for(int j=0; j1; j++){

System.out.println(num1);

num1 += 2;

}

// 线程1打印完成后, 将state赋值为2, 表示接下来将轮到线程2打印

state = 2;

// notifyAll()方法唤醒在t上wait的线程2, 同时线程1将退出同步代码块, 释放t锁

t.notifyAll();

}

}

}

}).start();

new Thread(new Runnable() {

@Override

public void run() {

while(num2100){

synchronized (t) {

if(state!=2){

try {

t.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

for(int j=0; j1; j++){

System.out.println(num2);

num2 += 2;

}

state = 1;

t.notifyAll();

}

}

}

}).start();

}

}

java多线程并发的问题

回答这个问题需要先弄清楚线程的概念和线程的生命周期。

线程:是指程序代码的一次执行,是动态的过程。楼主在定义OneTh这个实现Runnable接口类的时候肯定复写了他的run()方法。onet1和onet2是两个线程,也就是说虽然他们的run()方法相同,但是是执行了两次的。

计算机中CPU的调度过程:现在的电脑看上去能同时实现多任务,像是一边上QQ,一边听音乐,还可以一边上网。但计算机中的CPU只有一个,它没有分身术,不可能真正意义上实现同时运行这么多程序。而是采用了一种时间片轮转的方式,为每个应用程序赋予极短的时间,然后高速的在不同的程序间切换,至于每次切换到那个程序,这个要由CPU和线程的优先级来决定。

线程的生命周期:创建时是初始化了这个线程,调用start方法时,是让这个线程进入了可运行状态,注意是可运行,不是正在运行。就像上面说的,在某一时刻CPU具体要运行谁是由CPU和线程的优先级决定的。当线程被CPU运行时,就会开始执行run方法,但可能执行到一半时,CPU又被其他可运行线程抢走,而只能暂停执行。

JAVA程序线程的运行:在我们使用java命令来运行程序时,这时候已经开始了两个线程,一个是main()方法的线程,一个是垃圾回收的线程。当楼主调用start方法开启另外两个线程时。这时候由于CPU来决定运行哪个线程。所以虽然noet1是先开启的,但在执行noet1时,CPU可能又去跑去执行main线程了,然后就会开启onet2.

还有我觉得主线程结束了,只不过其他两个线程仍在继续运行。所以会打印出结果。

楼主如果还有什么不明白的话可以继续问或者相互讨论。

java 多线程并发请求数据,只要有一条线程获得数据,则其他线程终止运行,并打印出获得的数据

这边我写了一个例子,两个线程同时获取随机数,当获取的值为68的时候则停止所有进程。

这是目录结构:MyThreadOne和MyThreadTwo是两个线程,TestMain是主函数,MyThread继承Thread类。

MyThread.java

package com.xsx.test;

public class MyThread extends Thread {

public void stopThread() {}

}

MyThreadOne.java

package com.xsx.test;

import java.util.Random;

public class MyThreadOne extends MyThread{

private boolean isOK = true;

Random random = new Random();//演示

public void stopThread() {

this.isOK = false;

}

@Override

public void run() {

while(isOK) {

int x = random.nextInt(10000);

System.out.println("Thread One: " + x);

if(x == 68) {

TestMain.stopAll();

System.out.println("My Value is " + x);

break;

}

}

//这边你结合自己的逻辑来写,总之,是通过isOK来控制线程的

}

}

MyThreadTwo.java

package com.xsx.test;

import java.util.Random;

public class MyThreadTwo extends MyThread {

private boolean isOK = true;

Random random = new Random();//演示

public void stopThread() {

this.isOK = false;

}

@Override

public void run() {

while(isOK) {

int x = random.nextInt(10000);

System.out.println("Thread Two: " + x);

if(x == 68) {

TestMain.stopAll();

System.out.println("My Value is " + x);

break;

}

}

}

}

TestMain.java

package com.xsx.test;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

public class TestMain {

public static MapString, MyThread threadPool = new HashMapString, MyThread();//定义一个线程池

/***

 * 终止所有线程

 */

public static void stopAll() {

IteratorMyThread threads = threadPool.values().iterator();

while(threads.hasNext()) {

threads.next().stopThread();

}

threadPool.clear();

}

public static void main(String[] args) {

//实例化两个线程获取到随机数为68时就停止进程,并输出

MyThread thread1 = new MyThreadOne();//实例化线程1

MyThread thread2 = new MyThreadTwo();//实例化线程2

threadPool.put("thread1", thread1);//将线程1放入线程池中

threadPool.put("thread2", thread2);//将线程2放入线程池中

thread1.start();//运行

thread2.start();

}

}

项目已经打包上传


文章名称:java线程并发代码 java多线程并发编程
新闻来源:http://pwwzsj.com/article/doohgoh.html