1. java多线程有几种实现方法
java中多线程的实现方法有两种:
1.直接继承thread类;
2.实现runnable接口同步内的实现方法容有五种:1.同步方法;2.同步代码块;3.使用特殊域变量(volatile)实现线程同步;4.使用重入锁实现线程同步;5.使用局部变量实现线程同步
2. 基础Java题 试编写一个多线程的程序:启动4个线程。其中两个循环10次,每次将某全局变量加1,另两个循环1
publicclassDay18_A{
publicstaticvoidmain(String[]args)throwsInterruptedException{
Recounrec=Recoun.getRec();
Thread[]trr=newThread[4];
for(inti=0;i<4;i++){
trr[i]=newThread(newNumberTest(rec,i),"线程"+(i+1)+": ");
}
for(Threadthread:trr){
thread.start();
}
for(Threadthread:trr){
thread.join();
}
System.out.println("所有线程结束查看结果:"+rec.getCount());
}
}
{
privateRecounre;
privateintn;
NumberTest(Recounr,inti){
this.re=r;
this.n=i;
}
publicvoidrun(){
for(inti=0;i<10;i++){
re.method(n);
}
}
}
classRecoun{
privateintcount=0;
privateRecoun(){
}
privatestaticfinalRecounrec=newRecoun();
publicstaticRecoungetRec(){
returnrec;
}
publicsynchronizedvoidmethod(inti){
if(i%2==0){
System.out.println(Thread.currentThread().getName()+(count++));
}else{
System.out.println(Thread.currentThread().getName()+(count--));
}
}
publicsynchronizedintgetCount(){
returncount;
}
}
3. JAVA中如何利用多线程同时运行多个方法
首先,这个同时,只是在宏观上的,多线程环境,线程与线程之间,还是串行运行的。
要“回同时”运行多答个方法,那么,就需要创建多个线程,然后,在线程的run()方法里,写上你想要实现的逻辑。需如果创建多线程,这又是另一个问题(通过继承Thread跟实现Runnable来实现)。
4. JAVA项目中哪些场景需要用到多线程,深感迷茫,请使用过的高手指点。
场景一:一个业务逻辑有很多次的循环,每次循环之间没有影响,比如验证1万条url路径是否存在,正常情况要循环1万次,逐个去验证每一条URL,这样效率会很低,假设验证一条需要1分钟,总共就需要1万分钟,有点恐怖。这时可以用多线程,将1万条URL分成50等份,开50个线程,没个线程只需验证200条,这样所有的线程执行完是远小于1万分钟的。
场景二:需要知道一个任务的执行进度,比如我们常看到的进度条,实现方式可以是在任务中加入一个整型属性变量(这样不同方法可以共享),任务执行一定程度就给变量值加1,另外开一个线程按时间间隔不断去访问这个变量,并反馈给用户。
总之使用多线程就是为了充分利用cpu的资源,提高程序执行效率,当你发现一个业务逻辑执行效率特别低,耗时特别长,就可以考虑使用多线程。不过CPU执行哪个线程的时间和顺序是不确定的,即使设置了线程的优先级,因此使用多线程的风险也是比较大的,会出现很多预料不到的问题,一定要多熟悉概念,多构造不同的场景去测试才能够掌握!
5. java嵌套循环次数很多,怎么用多线程执行降低时间
将循环的数据分组,比如每组100条,分完之后开启线程,分别执行,线程可以用继承thread的方式,也可以实现runnable接口
6. 用JAVA实现多线程编写,使得许多小球在界面内循环跳动
下面这段代码应该符合你的需求
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class BounceThread
{ public static void main(String[] args)
{ JFrame frame = new BounceThreadFrame();
frame.show();
}
}
class BounceThreadFrame extends JFrame
{ public BounceThreadFrame()
{ setSize(300, 200);
setTitle("Bounce");
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} );
Container contentPane = getContentPane();
canvas = new JPanel();
contentPane.add(canvas, "Center");
JPanel p = new JPanel();
addButton(p, "Start",
new ActionListener()
{ public void actionPerformed(ActionEvent evt)
{ Ball b = new Ball(canvas);
b.start();
}
});
addButton(p, "Close",
new ActionListener()
{ public void actionPerformed(ActionEvent evt)
{ canvas.setVisible(false);
System.exit(0);
}
});
contentPane.add(p, "South");
}
public void addButton(Container c, String title,
ActionListener a)
{ JButton b = new JButton(title);
c.add(b);
b.addActionListener(a);
}
private JPanel canvas;
}
class Ball extends Thread
{ public Ball(JPanel b) { box = b; }
public void draw()
{ Graphics g = box.getGraphics();
g.fillOval(x, y, XSIZE, YSIZE);
g.dispose();
}
public void move()
{ if (!box.isVisible()) return;
Graphics g = box.getGraphics();
g.setXORMode(box.getBackground());
g.fillOval(x, y, XSIZE, YSIZE);
x += dx;
y += dy;
Dimension d = box.getSize();
if (x < 0)
{ x = 0; dx = -dx; }
if (x + XSIZE >= d.width)
{ x = d.width - XSIZE; dx = -dx; }
if (y < 0)
{ y = 0; dy = -dy; }
if (y + YSIZE >= d.height)
{ y = d.height - YSIZE; dy = -dy; }
g.fillOval(x, y, XSIZE, YSIZE);
g.dispose();
}
public void run()
{ try
{ draw();
for (int i = 1; i <= 1000; i++)
{ move();
sleep(5);
}
}
catch(InterruptedException e) {}
}
private JPanel box;
private static final int XSIZE = 10;
private static final int YSIZE = 10;
private int x = 0;
private int y = 0;
private int dx = 2;
private int dy = 2;
}